现在的位置: 首页 > 综合 > 正文

表单提交中get和post方式的区别

2013年10月17日 ⁄ 综合 ⁄ 共 2979字 ⁄ 字号 评论关闭
表单提交中get和post方式的区别归纳如下几点:
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。
下面举一个简单的例子来说明它们的区别:
<!-分别通过get和post方式提交表单-->
<FORM ACTION="getpost.asp" METHOD="get">
<INPUT TYPE="text" NAME="Text" VALUE="http://leewei.blogchina.com"></INPUT>
<INPUT TYPE="submit" VALUE="Get方式"></INPUT>
</FORM>
<BR>
<FORM ACTION="getpost.asp" METHOD="post">
<INPUT TYPE="text" NAME="Text" VALUE="http://leewei.blogchina.com"></INPUT>
<INPUT TYPE="submit" VALUE="Post方式"></INPUT>
</FORM>
<BR>
<% If Request.QueryString("Text") <> "" Then %>
通过get方式传递的字符串是: "<B><%= Request.QueryString("Text") %></B>"<BR>
<% End If %>
<% If Request.Form("Text") <> "" Then %>
通过Post方式传递的字符串是: "<B><%= Request.Form("Text") %></B>"<BR>
<% End If %>

先来看一下post方法.

ViewState,可以将页面恢复到原来状态。

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取值,在一个页面中赋值,在其他页面中共享,这个方式也被广泛应用.

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;

下面是get方法:

 string aa=SourceData.Value;

             string bb=SourceData.Value;

             string url="DestinationPage.aspx?parameter1="+aa+"¶meter2="+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. 

抱歉!评论已关闭.