1. IsPostBack通过 隐藏域 判断请求

1. __VIEWSTATE隐藏域:

HelloWold.aspx文件:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div aria-expanded="undefined" style="font-size: x-large; text-align: center; color: #00FFCC; font-weight: bold;">

        HelloWord!<br />
    </form>
</body>
</html>

一个简单的HelloWord程序,生成的页面源码中:

<body>
    <form method="post" action="HelloWord.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="rDfpt8vgqcTGYNU51ECzrJEFVVXWdAe7xoQwF2NvJS7dAM/TieOBDlNXpDYi8oaGi3s5Bn1vptL0F0fC3cBeMfN5RuexW3xaoqLWl7VqVM4=" />
</div>
(浏览器向服务器发送请求,服务器收到后再将页面返回给浏览器)
form表单中加了一个runat=”server”后变成服务端控件了。
可以看出,服务端在返回给浏览器的form标签自动生成了method和action属性,不仅如此,还加了隐藏域,叫做__VIEWSTATE
微软将很多默认控件的代码都交给了隐藏域,例如GridView,使用服务端控件,开发效率高,但是运行效率低,在页面源代码中,GridView产生的__VIEWSTATE隐藏域中的值非常非常多!当提交给服务器时,收到后会一层层的以隐藏域中的值进行渲染,这时,数据传输和浏览器加载会变得非常慢!

但是微软将这许许多多的值放在隐藏域中最大的目的就是:HTTP协议的状态保持!

好处是:程序员在开发时不需要了解HTTP协议或任何东西,只需要拖一个控件过来,加上runat=”server”即可!


2. IsPostBack判断:

IsPostBack:如果是POST请求该属性的值为true,如果是GET请求该属性的值为false.

IsPostBack:是根据__VIEWSTATE隐藏域进行判断的,如果是POST请求那么该隐藏域的值会提交到服务端,那么IsPostBack属性也就为true.

如果将form标签的runat=”server”去掉,那么就不能用该属性进行判断是POST请求还是GET请求。因为去掉form标签的runat=”server”,那么就不会再产生 __VIEWSTATE隐藏域了。

.aspx.cs文件:

  protected void Page_Load(object sender, EventArgs e)
        {
            //如果隐藏域的值不为空,表示用户单击了提交按钮发出了POST请求
           // if (!string.IsNullOrEmpty(Request.Form["isPostBack"]))

            if(IsPostBack)
            {
                InsertUserInfo();
            }
        }



3.另一种写法

当然,你觉得隐藏域的值太多了而导致运行速度太慢的话,也可以删掉runat=”server”(删掉后,默认的控件都不可用),自己在

 <form id="form1" runat="server">

写method 和 action属性。
然后手动再写一个隐藏域
<input type="hidden" name="isPostBack" value="aaa" />

这时.aspx.cs文件里的判断也要改:

if(!string.IsNullOrEmpty(Request.Form["isPostBack"]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值