2011-04-09 147 views
2

我有一個ASP.NET 4.0 Web窗體。有一個我希望用戶提交和檢查的文本框。如果它是 是正確的,我會清空文本框,並且不希望用戶能夠重新提交該數據。在IE8中,用戶可以回擊(獲得重新提交警告),如果刷新,它將重新提交該文本框中的數據。不允許重新提交頁面

我已經嘗試將值設置爲null並禁用textbox的viewstate。

如何停止重新提交?

+0

你不能禁用按鈕本身嗎?或者,在最後一種情況下,作爲不好推薦的解決方法,您可以在首次提交時添加視圖狀態並檢查該狀態。 – Andre 2011-04-09 21:12:09

+0

您無法停止重新提交,瀏覽器將執行瀏覽器要執行的操作。你可以檢查提交,如果它是重複的,然後忽略它。可能你需要渲染一個隱藏的GUID或類似的東西來檢查重複? – 2011-04-09 21:12:53

回答

1

我不認爲對於後退按鈕,你有任何選擇,但要檢查表單上的值再次提交,並確定如果它是重新提交的表單或不。 你有另一種選擇,在提交後重定向到名爲test.aspx的中間頁面,該頁面重定向到目標頁面,因此在這種情況下,後退按鈕將不起作用。

1

您可以使用AJAX發佈文本框中的數據,由於您沒有「返回」按鈕,因此更好。

對於小東西(一個場,小信息)我用這一個:

$.post("savedata.aspx", { name: "John", time: "2pm" }); 

看看在others examples,它可能是有用的。

只記得在你的項目中引用jQuery

2

您可以實現在此處詳細說明的郵件重定向獲取模式Wikipedia以刪除刷新和雙重回發。

+0

無論如何你都應該這樣做。使用歷史記錄時重新提交警告是非常不公平的。 – ysdx 2011-04-10 00:36:08

1

提交後,您可以保存表單已被提交到會話變量中的事實。當表單被提交時,你首先測試這個變量。如果這個變量是真的(或者你設定的那個),那麼什麼都不做。用戶可以刷新並且不會重新提交。

2

如果絕對至關重要的是提交文件永遠不會被處理兩次,請結合上述所有內容。

  1. 放一些的onclick提交按鈕的javascript禁用或隱藏它,按照安德烈的評論
  2. 實施後/重定向/獲取按哈根達斯劉易斯的鏈接,以保證打在瀏覽器刷新不會重新提交形式
  3. 最後,根據Matt Greer和艾莉森的建議添加一個隱藏字段,會話變量等,所以如果某件事情通過了 - 例如連接在帖子和重定向之間超時,並且用戶在瀏覽器上點擊刷新 - 您不會在後端對其進行雙重處理。