文档章节

页面间参数传递问题

aminqiao
 aminqiao
发布于 2014/06/09 14:20
字数 675
阅读 309
收藏 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
广州
springmvc - 关于Controller中方法参数类型的几点注意

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

中柠檬
2016/12/10
14
0
Spring3.0_MVC中解决提交表单时产生的中文乱码的方法

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

空云万里晴
2012/03/29
0
0
js 不同页面间传递值并取值

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

沉迷学习中
2017/09/25
0
0
ionic3三种跳转方法对应的页面间数据传递

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

神奇的小卷毛
2017/10/23
0
0
JS解析URL参数并返回JSON格式

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

沫沫金
01/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ubuntu 18.04 desktop 截图快捷键

如图,点击下方的 add shortcut 为这个快捷键命名 输入截图 command gnome-screenshot -a 设置快捷键 常用为 Ctrl - Alt + a 参考 http://os.51cto.com/art/200903/113091_all.htm...

公孙衍
23分钟前
0
0
一个六年Java程序员的从业总结:比起掉发,我更怕掉队

恍然间,发现自己在这个行业里已经摸爬滚打了五、六年了,原以为自己就凭已有的项目经验和工作经历怎么着也应该算得上是一个业内比较资历的人士了,但是今年在换工作的过程中却遭到了重大的挫...

老道士
25分钟前
12
2
Spacemacs快捷键

由于Spacemacs快捷键太多,为方便使用,将常用的快捷键记录在此。 以下快捷键都是在emacs的evil模式下 Buffers操作 创建名称为<buffer-name>的buffer SPC b b <buffer-name> 从已打开的buf...

yxmsw2007
30分钟前
1
0
GO冒泡,二分查找

package mainimport("fmt")func main() {var arr [5]int = [5]int{11,13,9,2,25}maopao(&arr)fmt.Println("arr = ", arr) //[2 9 11 13 25]findIndex := binaryFind(&arr, 0......

汤汤圆圆
54分钟前
1
0
工作2年半跳槽面试阿里,成功拿到offer,凭什么?

2015年刚毕业的我,进入了一家小小的公司实习工作,在学校学了三年软件开发的我,还是想去寻找一份互联网行业的工作,这样更能学以致用发挥自己的特长。一直到18年三月份,我辞掉已有的工作,...

java知识分子
58分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部