文档章节

页面间参数传递问题

aminqiao
 aminqiao
发布于 2014/06/09 14:20
字数 675
阅读 309
收藏 0
点赞 0
评论 0

ASP.NET应用程序前台与后台的数据交换都是通过FORM表单来完成的,FORM表单提供了两种数据传输方式:GET和POST,这个两种数据传输方 式在实际传输中有很大的不同,但ASP.NET框架中已经屏蔽了二者的一些差异。GET是用来从服务器上获得数据,而POST是用来向服务器提交数据的。 二者数据传输过程中分别对应了HTTP协议中的GET和POST方法。

    GET方式是把参数数据队列加到提交表单的ACTION属性所指的URL后面,并且使用"?"隔开,值和表单内各个字段一一对应,在URL中可以看到,它是FROM默认的提交方式,受URL长度的限制,它所能传递的数据量小。
    POST方式是把表单中的数据放在FORM载体中,按照变量和值相对应的方式,传递到ACTION所指向URL,POST可以传递大数据量的信息到服务器,通常文件上传就是使用POST方式上传。

    为解决GET方式传递大数据量参数的问题,要使用POST方式进行数据提交,下面是一个用来代替window.open的方法
1.JavaScript

/*
 * PostNewWin
 * Author:ppchen
 
*/
var PostNewWin = function(url){
    
var urlArr = url.split("?");
    
var postUrl = urlArr[0];
    
var postData = urlArr[1];
    
var iframe = document.getElementById("postData_iframe");
    
if(!iframe){
        iframe 
= document.createElement("iframe");
        iframe.id 
= "postData_iframe";
        iframe.scr
= "about:blank";
        iframe.frameborder 
= "0";
        iframe.style.width 
= "0px";
        iframe.style.height 
= "0px";
        
        
var form = document.createElement("form");
        form.id 
= "postData_form";
        form.method 
= "post";
        form.target 
= "_blank";
        
        document.body.appendChild(iframe);
        iframe.contentWindow.document.write(
"<body>" + form.outerHTML + "</body>");
    }
    iframe.contentWindow.document.getElementById(
"postData_form").innerHTML = "<input name='postData' id='postData' type='text' value='" + postData + "'/>";
    iframe.contentWindow.document.getElementById(
"postData_form").action = postUrl;
    iframe.contentWindow.document.getElementById(
"postData_form").submit();
};

 
2.CSharp

/// <summary>
/// 从Form中取得参数
/// Author:ppchen
/// </summary>
/// <returns>参数集合</returns>
private NameValueCollection ParseFormData()
{
    NameValueCollection sQueryString 
= new NameValueCollection();
    
if (this.Request.Form.Count > 0 && this.Request.Form["postData"!= null)
    {
        
string sPostData = this.Request.Form["postData"].ToString();
        sPostData 
= sPostData.Trim(new char[] { '&'' ' });
        
if (!string.IsNullOrEmpty(sPostData))
        {
            
string[] sParameterList = sPostData.Split('&');
            
for (int i = 0; i < sParameterList.Length; i++)
            {
                
string[] sParameter = sParameterList[i].Split('=');
                
for (int j = 0; j < sParameter.Length; j = j + 2)
                {
                    sQueryString.Add(sParameter[j], HttpUtility.UrlDecode(sParameter[j 
+ 1]));
                }
            }
        }
    }
    
return sQueryString;
}


通过以上的JS代码在客户端打开页面,通过以上的CS代码在服务端取得参数,这样使用了POST方式解决了GET方式中URL的长度限制,可以传递大数据量的参数了:)


乱码问题

比如ajax请求的url="searchPeoBySomeWords.do?KeyWord="+obj.value;我们需要用escape函数来将中文参数“包装”两下,看清楚是两下,不是一下。url="searchPeoBySomeWords.do?KeyWord="+escape(escape(obj.value))。 那么这样“包装”后我们如何在action中来解码了,不要急,一个java方法就能解决问题(代码如Escape.java)。action中我们只要 用Escape.java中的unescape静态方法就可解码。String keyWord = Escape.unescape(request.getParameter("KeyWord")).trim();原来拆开"包装"后,依然是我们可爱的中文。

© 著作权归作者所有

共有 人打赏支持
aminqiao
粉丝 7
博文 30
码字总数 1305
作品 0
广州
JSP页面间传递参数方法介绍

JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数。下面介绍一下实现的方法。 (1)直接在URL请求后添加 如:< a href="thexuan.jsp?action=transparams&detail=d...

罗盛力 ⋅ 2012/01/31 ⋅ 1

Spring3.0_MVC中解决提交表单时产生的中文乱码的方法

在spring3.0_MVC 框架中,通过JSP页面、HTML页面提交表单时,表单的参数传递到对应的servlet后会出现中文显示乱码的问题。解决办法可采用spring自带的过滤技术,对所有页面间参数的传递设置统...

空云万里晴 ⋅ 2012/03/29 ⋅ 0

springmvc - 关于Controller中方法参数类型的几点注意

简单类型 1、当controller方法中的参数类型为基本数据类型时。如果页面提交过来的数据为null或"",会出现数据转换的异常。 2、当controller方法中的参数类型为基本数据类型的包装类型时,页面传...

中柠檬 ⋅ 2016/12/10 ⋅ 0

js 不同页面间传递值并取值

原博主地址:http://blog.csdn.net/web_xyk/article/details/47857033 以前没用到过页面间传递参数再从后台获取数据,然后搜索了一下。 发现了一个比较好的方法: 1.先说需求:现在有页面pag...

沉迷学习中 ⋅ 2017/09/25 ⋅ 0

ionic3三种跳转方法对应的页面间数据传递

1.将数据传递到要跳转到的页面 (1)push() 要将新页面推送到堆栈,可使用push方法。同时也可以通过将数据传递给push方法的第二个参数,来将数据传递给下一个页面。 (2)[navParams]属性: ...

神奇的小卷毛 ⋅ 2017/10/23 ⋅ 0

JS解析URL参数并返回JSON格式

背景 有时候,简单的参数只需要两个页面间传递,无需后台加工,这个时候,就可以考虑使用页面间传参方式 方案 采用JS中location.search获取传递的参数 优势 1、直接传递2、无依赖3、主流浏览...

沫沫金 ⋅ 01/05 ⋅ 0

参数(parameter)和属性(Attribute)的区别

在JAVA WEB开发中经常遇到获取请求参数的值和在request对象中set或者get属性,初学者往往容易混淆,那么二者之间关系到底如何呢?下面是个人的总结: 区别: 来源不同: 参数(parameter)是...

JackMo2015 ⋅ 2016/12/07 ⋅ 0

EL表达式param隐含对象

一、request.getParameter() 和request.getAttribute() 区别 (1)request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttr...

月下独酌100 ⋅ 2013/02/18 ⋅ 0

C#页面之间跳转功能的小结

在两个ASP.NET页面之间传递值 引言 ASP.NET提供了卓越的事件驱动编程模型,让开发者简化了应用程序的总体设计,但是这个也造成了它固有的一些问题,例如,使用传统的ASP里,我们可以通过使用...

aehyok ⋅ 2013/03/17 ⋅ 0

Vue 随笔

1 . 参数传递 页面组件间相互传参 声明式:<router-link :to="..."> 编程式:router.push(...) 组件间传参 路由传参 子组件向父组件传递 子组件部分 子组件通过点击按钮触发change事件,执行...

葉子君 ⋅ 2017/11/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 35分钟前 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部