asp.net的页面加载[转]
2006-02-01 22:09
148 查看
在asp.net 中,当用户向aspx页面发出请求时,web服务器会交由asp.net引擎aspnet_isapi.dll来处理。asp.net引擎会先检查输出缓冲中是否有此页页面或者有此源代码,然后由编译器编译成dll文件。编译时asp.net引擎会从page类动态派生一个新类。如果此页面已经编译,择直接建立对象,处理事件,返回客户端浏览器;如果在输出缓冲中找到页面,则直接将输出缓冲中的内容返回到浏览器。
http协议是无状态的,asp.net通过把页面的状态封装到隐藏的输入域来维护状态信息。
asp.net 载入页面的时候触发下列事件:
page_init 页面初始化时触发,事件结束后,页面初始化完成。
page_load 页面载入且页面状态恢复后,触发此事件。
page_unload 页面从内存中释放时触发。
example:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) //判断页面是否第一次加载
{
Label1.Text = " this is first access!";
}
else
{
Label1.Text = "page post back";
}
}
protected void Page_Init(object sender, EventArgs e)
{
Label2.Text = "page init";
}
页面加载后,先执行一次page_init ,然后执行page_load ,因为时第一次加载,所以ispostback 为假,所以 执行if语句里面的操作。
当页面上的控件进行提交,造成页面刷新的时候, page_init 不再加载,而page_load 再次执行,还是判断ispostback,这次执行的是else里面的语句。
前面谈到了aspx是使用viewstate来保存网页的状态。
网页第一次加载后:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTg1NjA5MDU3MQ9kFgICAw9kFgQCAQ8P
FgIeBFRleHQFFiB0aGlzIGlzIGZpcnN0IGFjY2VzcyFkZAIFDw8
WAh8ABQlwYWdlIGluaXRkZGQSd0DJn0GzjPC73T2o9IO517OL2Q==" />
控件产生事件,造成页面刷新后:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTg1NjA5MDU3MQ9kFgICAw9kFgQCAQ8P
FgIeBFRleHQFDnBhZ2UgcG9zdCBiYWNrZGQCBQ8PFgIfAAUJcG
FnZSBpbml0ZGRk7AoaK/qplWZEe7O8glpO8wpOuSY=" />
viewstate状态已经不一样了!
如果我们仅仅是按F5键对页面进行刷新,而不是因为控件的提交进行页面刷新,再次查看Source code.
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTg1NjA5MDU3MQ9kFgICAw9kFgQCAQ8P
FgIeBFRleHQFDnBhZ2UgcG9zdCBiYWNrZGQCBQ8PFgIfAAUJcG
FnZSBpbml0ZGRk7AoaK/qplWZEe7O8glpO8wpOuSY=" />
和上次的一样,所以单纯的页面刷新并不会改变网页的状态。
Tips:有时候在设计数据库程序时,不小心多刷新了一次页面,很可能造成数据库的重复插入新记录。
解决办法可以是--插入新记录成功后,立刻重定向本页到当前页面
也可以用一个session来保存前一个viewstate,和当前的viewstate做比较,如果一样,则不必进行数据的再次保存,表明网页没有变化。
http协议是无状态的,asp.net通过把页面的状态封装到隐藏的输入域来维护状态信息。
asp.net 载入页面的时候触发下列事件:
page_init 页面初始化时触发,事件结束后,页面初始化完成。
page_load 页面载入且页面状态恢复后,触发此事件。
page_unload 页面从内存中释放时触发。
example:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) //判断页面是否第一次加载
{
Label1.Text = " this is first access!";
}
else
{
Label1.Text = "page post back";
}
}
protected void Page_Init(object sender, EventArgs e)
{
Label2.Text = "page init";
}
页面加载后,先执行一次page_init ,然后执行page_load ,因为时第一次加载,所以ispostback 为假,所以 执行if语句里面的操作。
当页面上的控件进行提交,造成页面刷新的时候, page_init 不再加载,而page_load 再次执行,还是判断ispostback,这次执行的是else里面的语句。
前面谈到了aspx是使用viewstate来保存网页的状态。
网页第一次加载后:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTg1NjA5MDU3MQ9kFgICAw9kFgQCAQ8P
FgIeBFRleHQFFiB0aGlzIGlzIGZpcnN0IGFjY2VzcyFkZAIFDw8
WAh8ABQlwYWdlIGluaXRkZGQSd0DJn0GzjPC73T2o9IO517OL2Q==" />
控件产生事件,造成页面刷新后:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTg1NjA5MDU3MQ9kFgICAw9kFgQCAQ8P
FgIeBFRleHQFDnBhZ2UgcG9zdCBiYWNrZGQCBQ8PFgIfAAUJcG
FnZSBpbml0ZGRk7AoaK/qplWZEe7O8glpO8wpOuSY=" />
viewstate状态已经不一样了!
如果我们仅仅是按F5键对页面进行刷新,而不是因为控件的提交进行页面刷新,再次查看Source code.
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTg1NjA5MDU3MQ9kFgICAw9kFgQCAQ8P
FgIeBFRleHQFDnBhZ2UgcG9zdCBiYWNrZGQCBQ8PFgIfAAUJcG
FnZSBpbml0ZGRk7AoaK/qplWZEe7O8glpO8wpOuSY=" />
和上次的一样,所以单纯的页面刷新并不会改变网页的状态。
Tips:有时候在设计数据库程序时,不小心多刷新了一次页面,很可能造成数据库的重复插入新记录。
解决办法可以是--插入新记录成功后,立刻重定向本页到当前页面
也可以用一个session来保存前一个viewstate,和当前的viewstate做比较,如果一样,则不必进行数据的再次保存,表明网页没有变化。
相关文章推荐
- Asp.net"页面加载中"效果实现
- ASP.NET动态加载用户控件的页面生成过程
- 今天学习“Asp.net"页面加载中"效果实现”遇到的问题
- 【ASP.NET】1.ASP.NET页面事件加载顺序以及Global.asax文件的使用
- 使用Filter跟踪Asp.net MVC页面加载(转)
- ASP.NET中防止页面多次加载的IsPostBack属性
- asp.net如何在页面加载时响应回车事件
- ASP.NET中防止页面多次加载的IsPostBack属性
- 在Asp.net 2.0 中禁用页面缓存解决页面刷新(重新加载数据)的问题!
- 使用Filter跟踪Asp.net MVC页面加载时间
- asp.net在Render中加载Html来动态生成或者修改页面
- ASP.NET后台页面属性方法加载顺序
- asp.net中页面事件加载的先后顺序
- 使用Filter跟踪ASP.NET MVC页面加载时间
- 使用Filter跟踪Asp.net MVC页面加载时间
- 关于asp.net中页面事件加载的先后顺序(转)
- asp.net上传execl文件后,在页面上加载显示(示例代码)
- 关于ASP.NET动态加载Master页面
- asp.net(c#)页面加载时添加控件的属性和回车问题
- 那些年朋友劝,该知道的ASP.NET - 页面加载顺序