IsPostBack
ASP.NET页面的执行顺序说明:
Page_Init(页面初始化引发的事件)——>Page_Load(加载页面时引发的事件)——>Control Event(服务器控件引发的事件)——>Page_UnLoad(页面从内存中卸载时引发的事件)
Page对象具有IsPostBack属性。这是一个只读的Boolean类型属性,它可以指示页面是第一次加载还是为了响应客户端回传而进行的加载。您可以只在页面第一次加载时,执行一些耗费资源的操作(例如,从数据库获取数据或构造列表项)。如果页面回传到服务器并再次加载,就无须重复这些操作了。因为,任何输入或构建的数据都已被保留(使用视图状态)到后续的回传中。首次加载,IsPostBack为false,再刷新是为true 。
打开一个页面时,初始状态时IsPostBack为false(不是回传),执行if里面的语句,这时IsPostBack变为true(是回传),当你触发页面一个按钮事件时,IsPostBack为true(回传),这时不执行if里面的语句,也就是说你在页面上右键点刷新时不执行if里面的语句,因为这时页面已经打开,IsPostBack为true,在框架中,在页面a.aspx打开时,当你在框架中点击链接到a.aspx,这时if里面的语句执行,因为相当于IsPostBack回到初始状态为false。无论触发什么事件,页面后台代码执行一定从Page_Load开始。
刷新就是一次新的请求,IsPostBack 会执行,点击服务器控件时,其实是触发了submit 操作,这样 IsPostBack 就不会执行了,(例如:点击了TextBox或CheckBox触发了回发,如果这是数据绑定不是在if(!IsPostBack)里,而是在PageLoad里,则有可能取不到TextBox或CheckBox的值,因为每次执行PageLoad都会重新加载清空第一次加载的内容!),所以当页面有数据绑定时,如果绑定的控件取不到值,那看下是不是已把绑定放在if(!PostBack)里了,当点击服务器控件后立即刷新页面,这时候会提示你是否重新发送数据,如果选择是的话,其实相当于重新 submit 一下,如果选否,那就啥也不执行。
关于ispostback的问题
http://www.cnblogs.com/smhy8187/articles/790322.html
IsPostBack深入探讨
http://www.cnblogs.com/hobe/archive/2008/04/06/1139031.html
浅析ASP.NET的Page.IsPostBack 属性
http://www.17tech.com/news/2008050654025.shtml