2013-05-17 41 views
1

我有一個簡單的名稱和地址的註冊表。當用戶填寫並提交表單時,數據將被插入到數據庫中。防止頁面加載重新插入數據db

顯示成功警報消息。

如果現在用戶單擊刷新按鈕,將顯示成功警報框,並且同一行在數據庫中被複制。

如何避免這種情況。

我不想使用,如果存在數據庫。

任何幫助深表謝意。

感謝

+1

POST後重定向。 – CodeCaster

+0

http://aspalliance.com/687_Preventing_Duplicate_Record_Insertion_on_Page_Refresh.1 – Habib

回答

0

要真正避免你需要檢查,如果該數據已在數據庫中插入之前存在重複。如果你只是想避免頁面上這種行爲刷新你可以在插入後,將用戶重定向到另一個頁面:

Response.Redirect("other_page.aspx"); 
0

通常,當您刷新頁面,很前面的單擊事件將觸發,這將導致重新插入在你的數據庫中。爲了避免這種檢查頁面是否刷新/不在按鈕點擊事件。

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. 
     } 
    } 
} 

試試這個。希望這是你所期望的。

0

那麼在實際的情況下,您將有兩個選項來處理手動刷新場景,正如您已經解釋的那樣。

  1. 顯示「並且顯示成功警報消息」。您可以使用「您的數據保存成功,您是否想要清除下一條記錄的表單?選擇yes和no。當用戶單擊yes時,您應該將表單重置爲原始數據輸入狀態(至用戶以前的狀態開始填寫表單),這將阻止刷新的情況,你也可以重置表單,默認情況下不顯示yes或no消息

  2. 其次是將用戶重定向到其他頁面的同一頁面,列出了其中輸入記錄的實體的記錄。例如,從添加員工頁面重定向到員工列表網頁。

希望你能實現任何的這些。