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 + "@";
}
}
我找到了这个解决方案,它为我工作。我不明白,当提交页面然后查看状态变量和会话变量是相同的,之后我刷新页面然后查看状态和会话变量有不同的值,而上次他们具有相同的价值。
答案 0 :(得分:2)
这个想法非常简单。
Viewstate基本上是表单中的一些隐藏输入。我们的想法是在您提交表单一次后检测页面刷新。这是为了防止两次采取行动。
它是如何工作的。
首先,当您创建表单时,它在Viewstate和Session中都有“1”(例如)。提交后,从Viewstate中检索“1”,从会话中检索“1”:您获得IsPageRefreshed==false
。同时将“2”写入Session和新的Viewstate。
让我们说,现在用户点击“返回”。在这种情况下,页面的HTML从浏览器的缓存中获取,Viewstate的值为“1”。如果您现在提交表单,则在Viewstate中为“1”,在会话中为“2”:IsPageRefresh==true