在asp.net中处理页面刷新

时间:2011-12-12 06:36:32

标签: c# asp.net

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 + "@";

    }
}

我找到了这个解决方案,它为我工作。我不明白,当提交页面然后查看状态变量和会话变量是相同的,之后我刷新页面然后查看状态和会话变量有不同的值,而上次他们具有相同的价值。

1 个答案:

答案 0 :(得分:2)

这个想法非常简单。

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

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

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