2011-12-12 57 views
2
private Boolean IsPageRefresh = false; 
    protected void Page_Load(object sender, EventArgs e) 
    {   
     if (!IsPostBack) 
     { 
      ViewState["postids"] = System.Guid.NewGuid().ToString(); 
      Session["postid"] = ViewState["postids"].ToString(); 
      TextBox1.Text = "Hi"; 
    } 
    else 
    { 
     if (ViewState["postids"].ToString() != Session["postid"].ToString()) 
     { 
      IsPageRefresh = true; 
     } 
     Session["postid"] = System.Guid.NewGuid().ToString(); 
     ViewState["postids"] = Session["postid"]; 
    } 
} 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    if (!IsPageRefresh) // check that page is not refreshed by browser. 
    { 
     TextBox2.Text = TextBox1.Text + "@"; 

    } 
} 

,我发现这个解决方案及其me.Buddy工作我无法理解的是,当提交页面然后查看状态变量和会话变量是相同的,之后我刷新页面然后查看状态而会话变量在上一次具有相同的值时具有不同的值。处理页面刷新

+0

您的问题是什么? –

回答

2

这个想法很简单。

Viewstate基本上是窗体中的一些隐藏输入。这个想法是在您提交表单一次后检测页面刷新。这是为了防止采取两次行动。

所以它是如何工作的。
首先,当您创建表单时,它在Viewstate和Session中都有“1”(例如)。提交后,从Viewstate中检索“1”,从会话中检索“1”:您得到IsPageRefreshed==false。同时将“2”写入Session和新的Viewstate。

比方说,现在用户点击“返回”。在这种情况下,页面的HTML从浏览器的缓存中获取,并且Viewstate的值为“1”。如果您现在提交表单,则ViewState中的“1”和Session中的“2”:IsPageRefresh==true