我有一個簡單的名稱和地址的註冊表。當用戶填寫並提交表單時,數據將被插入到數據庫中。防止頁面加載重新插入數據db
顯示成功警報消息。
如果現在用戶單擊刷新按鈕,將顯示成功警報框,並且同一行在數據庫中被複制。
如何避免這種情況。
我不想使用,如果存在數據庫。
任何幫助深表謝意。
感謝
我有一個簡單的名稱和地址的註冊表。當用戶填寫並提交表單時,數據將被插入到數據庫中。防止頁面加載重新插入數據db
顯示成功警報消息。
如果現在用戶單擊刷新按鈕,將顯示成功警報框,並且同一行在數據庫中被複制。
如何避免這種情況。
我不想使用,如果存在數據庫。
任何幫助深表謝意。
感謝
要真正避免你需要檢查,如果該數據已在數據庫中插入之前存在重複。如果你只是想避免頁面上這種行爲刷新你可以在插入後,將用戶重定向到另一個頁面:
Response.Redirect("other_page.aspx");
通常,當您刷新頁面,很前面的單擊事件將觸發,這將導致重新插入在你的數據庫中。爲了避免這種檢查頁面是否刷新/不在按鈕點擊事件。
public partial class Class1 : System.Web.UI.Page
{
#region Code to Check Refresh postback
#region Private Variable
private int SessionValue
{
get
{
int value = default(int);
if (int.TryParse(Convert.ToString(this.Session["__REFRESH"]), out value))
return value;
return 0;
}
set
{
this.Session["__REFRESH"] = value;
}
}
private int ViewStateValue
{
get
{
int value = default(int);
if (int.TryParse(Convert.ToString(this.ViewState["__REFRESH"]), out value))
return value;
return 0;
}
set
{
this.ViewState["__REFRESH"] = value;
}
}
#endregion
#region Public Property
public bool IsPageRefreshed
{
get
{
return this.SessionValue != this.ViewStateValue;
}
}
#endregion
protected override object SaveViewState()
{
//Increment both the session and view state value at the same time.
this.SessionValue = this.SessionValue == int.MaxValue ? 0 : this.SessionValue + 1;
this.ViewStateValue = this.SessionValue == int.MaxValue ? 0 : this.SessionValue + 1;
return base.SaveViewState();
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button_Click(object sender, EventArgs e)
{
if (IsPageRefreshed)
{
// Here do your work. i.e save into DB.
}
}
}
試試這個。希望這是你所期望的。
那麼在實際的情況下,您將有兩個選項來處理手動刷新場景,正如您已經解釋的那樣。
顯示「並且顯示成功警報消息」。您可以使用「您的數據保存成功,您是否想要清除下一條記錄的表單?選擇yes和no。當用戶單擊yes時,您應該將表單重置爲原始數據輸入狀態(至用戶以前的狀態開始填寫表單),這將阻止刷新的情況,你也可以重置表單,默認情況下不顯示yes或no消息
其次是將用戶重定向到其他頁面的同一頁面,列出了其中輸入記錄的實體的記錄。例如,從添加員工頁面重定向到員工列表網頁。
希望你能實現任何的這些。
POST後重定向。 – CodeCaster
http://aspalliance.com/687_Preventing_Duplicate_Record_Insertion_on_Page_Refresh.1 – Habib