• 关于IsPostBack


    我们在写程序时,后台代码的Page_Load()事件中总是习惯的写上if(!IsPostBack){},然后写些代码逻辑,但自己对于为什么要有这个判断,或者说这个判断是否是必须的,以及何时不走里边的代码总是有些不确定,于是花点时间上网详细了解下做个总结。

    一.IsPostBack的定义:  获取一个值,该值指示当前页面是首次加载还是为了响应客户端回发事件而加载

    定义的很清晰,略加分析:就是说这是一个bool值,如果我们是第一次访问当前页面,这个bool值为false(不是回发加载),当我们触发页面某个能触发回发事件的事件时,这个bool值为true(是回发加载),那哪些事件能触发回发事件呢?

    两类:

    1>服务器端Button控件 从浏览器中查看源码可以看到:该控件被渲染成type=Submit的input标记,同时,其所在的form标记(runat=server),以被添加两个属性:Action="本页面",method="post" 这就是说,点击按钮,其所在的表单被默认提交到该页面后台--这是一类postback

    2>被标记为 AutoPostBack="true" 的其他服务器控件,能自动触发postback

    ★触发过程:先走Page_Load() 如果定义了该控件的某些事件,如dropdownlist的selectedIndexChanged,button的click事件,再走该事件

    我们经常在页面初次加载时绑定一些数据(如下拉框的数据),如果没有定义if(!IsPostBack){下拉框的数据绑定},页面就会在每次postback的时候再次访问Page_Load(),再次绑定数据,首先是效率降低(每次访问该页面都要加载一遍数据),而且有可能会出错(比如,定义了dropdownlist的selectedIndexChanged事件,想在里边对选中的值进行处理,结果触发该事件后却在Page_Load()将数据重新绑定,导致选择值丢失!)

    所以,页面加载事件中写if(!IsPostBack),不应该仅仅是一种习惯,更应该是体会到其作用,这样才能使我们的程序按照预想的流程跑下去

    PS:并不是每次页面刷新IsPostback=false 都成立

    当页面首次加载时IsPostback=false 下面要分情况了:
    ①没有点击页面任何回发请求的按钮或事件(如设置为autopostback=true的dropdownlist的selectedIndexChange事件),刷新页面,此时IsPostBack=false依然成立(没有过回发请求的刷新页面,一直都是首次加载页面)
    ②如果触发①中所述事件后再次刷新页面,此时IsPostBack=true,既页面已经做过回发请求,此后再刷新页面都是重复之前的回发请求,正如我们买东西下订单,提交一次后如果再次刷新页面就成了重复提交表单,当然浏览器都会针对这种情况有提示消息,但我们自己也应该明白并避免这种操作。

  • 相关阅读:
    【笔记】xml文件读写
    创业唯一不需要的是金钱
    关于阻焊层和助焊层的理解
    UNIX net
    一种方便调试的打印语句宏定义
    C语言指针一种容易错误使用的方法
    文件操作
    MPEG文件格式
    指针在函数间传递实质
    如何查看静态库内容 Unix/Linux
  • 原文地址:https://www.cnblogs.com/baweier2013/p/4066950.html
Copyright © 2020-2023  润新知