爲了防止重複的請求(即在點擊命令按鈕後立即按下F5),我設置了我的頁面基類,以便在檢測到重複請求時忽略該請求。如何在不清除瀏覽器的情況下忽略一個http請求?
當我說「忽略」我的意思是到Response.End()
現在,我想我以前看過這部作品,其中有一個問題,我剛纔到Response.End()和用戶頁面少了點沒有。我不知道這種情況的確切情況,但我現在無法重複。
現在,當我調用Response.End(),我只是得到一個空的瀏覽器。更具體地說,我得到這個HTML。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=utf-8"></HEAD>
<BODY></BODY></HTML>
我設置了以下測試應用程序以確認問題不在我的應用程序的其他地方。那就是:
以下內容添加到一個aspx形式
<asp:Label ID="lbl" Text="0" runat="server" /><br />
<asp:Button ID="btnAdd1" Text="Add 1" runat="server" /><br />
<asp:Button ID="btnAdd2" Text="Add 2" runat="server" /><br />
<asp:Button ID="btnAdd3" Text="Add 3" runat="server" /><br />
而這裏的代碼隱藏文件
using System;
namespace TestDupRequestCancellation
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Init(object sender, EventArgs e)
{
btnAdd1.Click += btnAdd1_Click;
btnAdd2.Click += btnAdd2_Click;
btnAdd3.Click += btnAdd3_Click;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
CurrentValue = 0;
else if (Int32.Parse(lbl.Text) != CurrentValue)
Response.End();
}
protected void Page_PreRender(object sender, EventArgs e)
{
lbl.Text = CurrentValue.ToString();
}
protected int CurrentValue
{
get
{
return Int32.Parse(Session["CurrentValue"].ToString());
}
set
{
Session["CurrentValue"] = value.ToString();
}
}
void btnAdd3_Click(object sender, EventArgs e)
{
CurrentValue += 3;
}
void btnAdd2_Click(object sender, EventArgs e)
{
CurrentValue += 2;
}
void btnAdd1_Click(object sender, EventArgs e)
{
CurrentValue += 1;
}
}
}
當加載頁面,點擊任意按鈕並期望是什麼,但如果您在按下其中一個按鈕之後隨時按下F5鍵,則會將其檢測爲重複請求並調用Response.End(),以及時結束該任務。這使用戶留下了空白的瀏覽器。
有沒有辦法讓用戶在頁面上保持原樣,所以他們只需點擊一個按鈕?
另外;請注意,這段代碼是我可以用來展示我的問題的最簡單的代碼。這並不是要演示如何檢查dup請求。
編輯:另一個改變,將允許我實現相同的結果將是禁用所有我的事件處理程序。那可能嗎?
這將允許我阻止事件的執行。謝謝。 – 2010-03-25 19:57:20