日历归档 |
|
<< < 2024 - 11 > >> | Su | Mo | Tu | We | Th | Fr | Sa | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
|
|
|
About Me |
|
|
ZhangSichu |
|
Male |
|
32 |
|
ZhangSichu@gmail.com |
|
ZhangSichu@hotmail.com |
|
ZhangSichu.com |
|
weibo.com/zhangsichu |
|
|
|
个人推荐 |
|
|
|
|
分类归档 |
|
|
|
|
My Friends |
|
|
|
|
如何区分PostBack是F5刷新还是FormSubmit
|
在一个页面上有很多Button或者可以提交的Html Dom对象,如何区分服务器端收到的PostBack是用户点击的FromSubmit还是F5页面刷新。在http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/BedrockASPNET.asp 这篇文章的Trap the Browser Refresh 部分讲述了一个办法,用Page. RegisterHiddenField 注册一个HiddenField和Session中的Ticket比较,确定是否是Refresh的办法。这个办法用到了IHttpModule HttpContext,在IHttpModule.Init(HttpApplication context)时把是否是Refresh的属性放在HttpContext中,供整个Page的生命周期(LifeCycle)使用。和这个方法的想法,差不多,下面是一个比较简便的实现方法。
用Session和ViewState的特定Key比较检查是否是刷新。每次OnPreRender后再次重新发号。
public partial class F5 : System.Web.UI.Page { private static string MaskKey = "____MASKKEY"; //注册全局的MaskKey protected void Page_Load(object sender, EventArgs e) { ShowStatus();//打印状态 } private void InitialMask() { this.Session[MaskKey] = this.ViewState[MaskKey] = Guid.NewGuid().ToString();//重新发号 给Session 和 ViewState 新的Guid Session在服务器端标志 ViewState放在客户端标志 } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); InitialMask();//发号 } public bool IsRefresh { get { if (this.Session[MaskKey] == null || this.ViewState[MaskKey] == null) return false; return !this.Session[MaskKey].ToString().Equals(this.ViewState[MaskKey].ToString());//检查Key是否相同 } } protected void btnTest_Click(object sender, EventArgs e) { this.lblGuid.Text = this.Session[MaskKey].ToString() + " " + this.ViewState[MaskKey].ToString();//打印Key } private void ShowStatus() { if (this.IsRefresh) { this.lblShow.Text = "F5 Refresh"; } else { this.lblShow.Text = "Html Dom submit"; } } } IE的F5 Refresh 提交的是IE中最后一次对服务器的请求,也就是上的ViewState中的东西,由于没有使用Html Dom来提交,没有提交这次新发的ViewState Key。这样Session中的Key和ViewState中的Key (上次的ViewState)不相同,则认为是F5 刷新。如果是相同的则说明用了最后Render的 Session Key和ViewState Key所以被认为是Html Dom的FormSubmit。 如下图:
|
|
#re:如何区分PostBack是F5刷新还是FormSubmit 10/25/2006 9:35:27 PM bill
|
|
|
|
|
|