簡體   English   中英

如何停止不必要的回發

[英]How to stop unwanted postback

我使用ASP.NET C#。 在按鈕單擊事件下,我想保存一些東西,但工作正常,但是在按下瀏覽器的刷新按鈕后,此事件再次發生,我想停止該事件。

關於此主題的文章。

防止重復刷新頁面上的記錄

方法1

一個簡單的解決方案是在調用INSERT命令后將Response.Redirect返回到同一頁面。 這將調用該頁面,而不會向其發送任何帖子標題。 使用Request.Url.ToString()作為Response.Redirect的第一個參數將導致URL和頁面的查詢字符串都包含在重定向中。 使用false作為第二個參數將禁止自動Response.End,否則可能會生成ThreadAbortedException。 這種方法的缺點是,任何已建立的ViewState都將丟失。

方法2

一種相關的方法是將表單提交到中間處理頁面,然后將Response.Redirect重定向回調用頁面,類似於經典的ASP處理表單的方法。 這具有與僅在Button_Click事件中使用Response.Redirect相同的效果,因此具有相同的缺點,另外還有缺點是創建另一個頁面供網站開發人員管理。

方法3

下一批解決方案通過確定用戶是否已刷新瀏覽器中的頁面而不是按下表單的“提交”按鈕來工作。 所有這些解決方案都取決於網站能否成功使用Session變量。 如果網站使用基於cookie的會話,但是用戶的瀏覽器不允許使用cookie,則這些解決方案都將失敗。 此外,如果會話過期,這些解決方案也會失敗。

方法4

如果用戶以某種方式設法避開了上述解決方案,那么最后一道防線便是數據庫。 可以采用兩種方法來防止將重復記錄插入數據庫中。 對於每種方法,我都將SQL代碼移到了存儲過程中,因為現在涉及更多的處理步驟,而在單獨的存儲過程中更易於說明。 但是請注意,並非嚴格要求使用存儲過程才能使這些方法起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM