本站首页    管理页面    写新日志    退出


«October 2025»
1234
567891011
12131415161718
19202122232425
262728293031


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接


Blog信息
blog名称:赤字先生
日志总数:28
评论数量:67
留言数量:0
访问次数:132094
建立时间:2006年10月8日




[软件技术]Post和Get的区别(兼谈页面间传值的方式) 
软件技术

赤字先生 发表于 2006/10/11 15:03:42

从一个页面转向另一个页面的请求方式有两种,Post和Get. 如果从原理上来探究他们的区别,涉及到Http传输协议的细节,这样深究下去,就成华为人干的事了,有空可以请教一下华为高人,我一个做企业软件的实在没那么多时间也没必要去研究那些东西,所以就看一下表象吧。 所有的人都知道如下区别: 1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。 2.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节. 3.Post顾名思义,就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为http请求的内容,而Get是在Http头部传输的。 我们的form表单的method方法,有两个,post,get.它在页面传值的时候的区别也就是上面提到的三点. 先来看一下post方法. 这个方法在asp时代应该跟程序员打交道很多的,因为那时候没有现在的ViewState,每个页面要恢复原来的状态,都要将页面Post给自身,然后挨个取值,重新赋值.现在这些琐碎的事情都让ViewState代劳了.所以将页面post给自身的动作,在某种程度上已经被Asp.net的程序员们忘却了,所以Post也就被大部分的忽视了,这就是技术进步的双刃剑,带来方便的同时,蒙上你的眼睛。 ViewState必须包含在<form runat="server">的窗体下,而只要包含了"runat="server""的标志,就甭想Post到其他页面中去,为什么?老盖说,我的ViewState是保存当前页面状态的,你要转到其他页面,他说,不行,**不认识的参数.如果想Post一个窗体,咋办?有四种方式可供选择. 1.在页面上新建一个form,不要加上runat="server"的标志,当然在这个窗体下的控件也就不用想用Viewstate来传值了.当在其他有runat="server"的窗体的中的按钮事件中,手动调用新建form的submit() 函数. 传送页面代码如下: <!--html代码--> <form id="Form1" method="post" runat="server">             <input id="btnTransfer" type="button"  onclick="post();" runat="server">             <input type="text" runat="server" id="SourceData">         </form>         <form id="forPost" method="post">             <input type="text" runat="server" id="SourceData2">         </form> <!--Script代码--> <script language="javascript">             function post()             {                 forPost.action="DestinationPage.aspx";                 forPost.submit();             }         </script>     接收页面 string a=Request.Form["SourceData2"].ToString();   2.通过Session取值,在一个页面中赋值,在其他页面中共享,这个方式也被广泛应用,个人不倾向于用这种方式,我怕造成Session值的混乱无序,Session用来存一些公共的东西已经累得够呛了。 3.通过Context传值,在传送页面之前,将需要传递到其他页面的值存在Context中。示例代码如下: 传送页面 //点击某个button时触发 private void btnTransfer_ServerClick(object sender, EventArgs e)          {             Context.Items["SourceData"]=SourceData.Value;             Server.Transfer("DestinationPage.aspx");         }   接收页面 string a=Context.Items["SourceData"].ToString();   4.通过Server.Transfer的方式。 这个方式在方法三种已经用到了,不过可以在调用页面为要传递到被调用页面的值创建属性(当然可以直接将它设成public),这样就可以在其他页面访问了。 传送页面 //要传送的值 private  System.Web.UI.HtmlControls.HtmlInputText SourceData; public string getSourceData {   get    {     return SourceData.Value;   } } //传送页面 Server.Transfer("DestinationPage.aspx");   接收页面 private SourceClass sourcePage; sourcePage=(SourceClass)Context.Handler;             string aa=sourcePage.getSourceData;   以上就是Post的在不同页面传递数据的方式了。 下面是get方法 我常用的是  传送页面 string aa=SourceData.Value;             string bb=SourceData.Value;             string url="DestinationPage.aspx?parameter1="+aa+"&parameter2="+bb;             Response.Redirect(url,false);   接收页面 string aa=Request.QueryString["parameter1"].ToString();             string bb=Request.QueryString["parameter2"].ToString();     至于 Response.Redirect(url,false)里的false都是Response.End()这个方法惹的祸,老盖说,写成false就好了,因为默认是true。我都转向其他页面了,还不让我终止原来页面的响应,BT


阅读全文(7235) | 回复(3) | 编辑 | 精华
 


回复:Post和Get的区别(兼谈页面间传值的方式)
软件技术

bb(游客)发表评论于2007/8/28 10:01:28



个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:Post和Get的区别(兼谈页面间传值的方式)
软件技术

jerry(游客)发表评论于2008/1/26 22:02:01

很好,很有帮助

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:Post和Get的区别(兼谈页面间传值的方式)
软件技术

lin(游客)发表评论于2008/6/26 11:22:01

这个很有用,谢谢先生!!

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144802207 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号