c#ispostback详解

1.IsPostBack用来判断表单是否是回发。(不是第一次请求),是点击表单的提交按钮回发过来的。是否是回发与get请求还是Post请求无关。但是一般情况下回发都是Post请求。一般Get请求都是第一次加载。
2.只有当使用服务器端表单<form runat="server">IsPostBack才可以使用。如果使用客户端表单,则IsPostBack永远都是False.因为当使用服务器端表单的时候会自动生成一个隐藏域,才该隐藏域中,服务器写入了一些内容,通过这些内容就可以判断是否是回发。如果使用的是普通html表单,则需要自己写代码来判断是否是回发。
3.IsPostBack的使用方式,为什么要使用IsPostBack
减少数据加载的次数。避免了每次点击按钮回发都重新加载一次数据。


HTML页面

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <html>  
  2. <form action="Page1.aspx">  
  3. <input type="text"  name="UserName" value="Jim">  
  4. <input type="submit" value="提交">  
  5. </form>  
  6. </html>  


[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -------------------------------------------------------------Page1.aspx处理页面(一般处理程序)  
  2. public void ProcessRequest(HttpContext context)  
  3. {  
  4.     context.Response.ContentType = "text/html";  
  5.           
  6.     string mappath = context.Server.MapPath("Page1.aspx");//获取Page1.aspx的路径  
  7.               
  8.     string con = System.IO.File.ReadAllText(mappath);  //读取mappath的内容  
  9.               
  10.     context.Response.Write(con); 将内容写入(画出)到浏览器端  
  11.               
  12.     //在这里判断用户是否是第一次进入页面(即:用户不是在向服务器在提交表单)  
  13.     string name=context.Request["UserName"];//获取一下name属性为UserName表单的值。如果能获取到值那么用户就是提交了表单而进入页面。否则用户就是第一次进入页面  
  14.     
  15.     if (string.IsNullOrEmpty(name)) //如果没有获取到name属性为UserName表单的值。  
  16.     {  
  17.          context.Response.Write("直接就进入网页了,即用户第一次进入页面。并没有提交表单");  
  18.     }  
  19.     else  
  20.     {  
  21.         context.Response.Write("提交表单后,经过处理后进入的网页(也就是说网页是经过提交表单后重新画出来的)");  
  22.     }  
  23.              
  24. }  

那么现在问题就来了, 每次去取有name 属性的表单的值,以能不能获取到这个值(判断是否为空)来判断用户是否为提交进入页面。这样是有问题的,假如这个有name属性表单的值本身就是允许为空呢? 所以我们这里就添加一个隐藏字段hidden  将他的name 属性设为isPostback ,value值永远设为true(当然你也可以设置其他的值,只要不为空)

这样用户每次提交表单的时候,不管其他有name属性的表单值是否为空,hidden这个表单的值是一定能提交出去,并且能获取到这个值的(因为我已经将hidden表单的值设为一定不能为空)   那么我们就用这个hidden表单的的值是否为空来判断用户是否为提交表单而进入页面(即:用户不是第一次进入页面)


[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <html>  
  2. <form action="Page1.aspx">  
  3. <input type="hidden" name="ispostback" value="true">  
  4.   
  5. <input type="text"  name="UserName" value="">  
  6. <input type="submit" value="提交">  
  7. </form>  
  8. </html>  


[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //if(!ispostback)就表示用户是第一次进入页面。if(ispostback)就表示用户是提交表单进入,非第一次进入页面  
  2.   
  3. // 如果isPostback==true 那么是提交进入  ; 即:if(ispostback) 提交进入 否则第一次进入   
  4.    
  5. //-------------------------------------------------------------Page1.aspx处理页面(一般处理程序)  
  6.   
  7. public void ProcessRequest(HttpContext context)  
  8. {  
  9.     context.Response.ContentType = "text/html";  
  10.           
  11.     string mappath = context.Server.MapPath("Page1.aspx");//获取Page1.aspx的路径  
  12.               
  13.     string con = System.IO.File.ReadAllText(mappath);  //读取mappath的内容  
  14.               
  15.     context.Response.Write(con); //将内容写入(画出)到浏览器端  
  16.       
  17.               
  18.     //在这里判断用户是否是第一次进入页面(即:用户不是在向服务器在提交表单)            
  19.     string ispostback=context.Request["ispostback"];//获取一下name属性为ispostback表单的值。如果能获取到值那么用户就是提交了表单而进入页面。否则用户就是第一次进入页面  
  20.     
  21.     //string.IsNullOrEmpty()是判断一个值是否为空,如果为空则返回true 否则返回false  
  22.     if (string.IsNullOrEmpty(ispostback)) //如果没有获取到name属性为ispostback表单的值。  
  23.     {  
  24.          context.Response.Write("直接就进入网页了,并没有提交表单");  
  25.     }  
  26.     else  
  27.     {  
  28.         context.Response.Write("提交表单后,经过处理后进入的网页(也就是说网页是经过提交表单后重新画出来的)");  
  29.     }  
  30.   
  31.     //if(ispostback==null)  
  32.     //{  
  33.     //    context.Response.Write("直接就进入网页了,并没有提交表单");  
  34.     //}  
  35.     //else  
  36.     //{  
  37.     //    context.Response.Write("提交表单后,经过处理后进入的网页(也就是说网页是经过提交表单后重新画出来的)");  
  38.     //}       
  39. }  

    二、解决编辑数据时数据更新的数据原来的,无法修改的问题

    解析:因为当后台编辑数据时,先从后台查询出需要编辑的数据,此时是在不是回传的情况下从数据库查询出数据,当编辑完数据之后,点击提交按钮,提交数据,此时如果没有判断是否回传,会再次查询原来的数据,造成编辑数据没有改变。

    
    namespace Example
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)   //不是回传即第一次加载页面传过来的值为空
                {
    
     
    
                }
                if (Request.QueryString["id"] != null)
                {
                    Bind();
                }
                else
                {
                    Response.Write("<script>alert('数据发生改变')</script>");
                }
              
            }
            public void Bind()
            {
                Response.Write("数据");
            }
            protected void button1_Click(object sender, EventArgs e)
            {
                Response.Redirect("WebForm1.aspx?id=3 ");
                //Server.Execute("WebForm2.aspx?id=3");
            }
    
     
    
            protected void CesH_Click(object sender, EventArgs e)
            {
                Label1.Text = "测试";
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值