Sunday, August 31, 2008

纠正了原来一个关于 Page 的错误认识

本来不明白asp.net是如何封装http的request的,得到 Page 对象的
今天看了
Understanding ViewState and Postback Processing in ASP.NET applications
Understanding ASP.NET View State

终于明白了原来 PostBack 就是asp.net实现 request 功能的机制(准确的说是类request功能,具体实现应该比较复杂,不过能理解就好)
Postback Data 就是 request 对应参数,
而 Postback Event 则相当于 request 的发起。

之前为了方便,都是在 Page 中用私有字段保存一些信息,但是发现一旦页面提交 form 之后,在 (!IsPostBack) 块内已经初始化过的私有字段又回到了 null 状态。
现在,了解了 Postback 的机制,就明白了,页面 form 提交后,浏览器上显示的页面已经是另一个由 Postback 触发的新 Page 了,由于是由Postback触发,这个Page具有 IsPostBack==true 的属性,因此在(!IsPostBack) 块内执行的初始化代码就不再执行。

因此,还是要像其他 framework 一样,应该用 Session 而不是 Page 的私有变量保存相关的信息。

No comments: