2011-11-17 63 views
1

我有一個asp.net mvc3站點,在單擊後退按鈕時顯示一些奇怪的行爲。我有一個文本輸入的表單,該值設置爲一個屬性上我的模型,像這樣:使用瀏覽器後退按鈕後顯示錯誤值的文本輸入

@using (Html.BeginForm("Search", "Home", FormMethod.Get, new { name = "searchForm" })) 
{ 
    <div> 
     <input id="term" type="text" name="Term" value='@Model.Term' /> 
     <input type="submit" value="Search" /> 
    </div> 
} 

一切的偉大工程,在瀏覽器中使用後退按鈕時除外。如果我輸入「ABC」,然後提交我的表單,輸入「XYZ」並再次提交,然後返回我仍然在文本字段中看到「XYZ」,但是當我使用瀏覽器開發人員工具檢查HTML時,它顯示正確的值的「ABC」(正確的值也在查詢字符串中)。

我在頁面上還放置了另一個地方,我放棄了@ Model.Term的相同值,但是在那個地方它正確地顯示爲「ABC」。

任何想法?我覺得它必須是我做的一些愚蠢的事情,但我無法弄清楚它:)

回答

0

瀏覽器很可能會顯示它最後看到的作爲表單輸入的內容,而不是HTML包含的內容。它不知道顯示文本的兩個地方之間的關係,它只知道用戶在其中一個類型中鍵入了'Bob'(所以它顯示了它)。

一個選項可能是在表單提交完成後保存一個cookie(服務器端)。然後使用顯示here的技術在點擊後退時觸發一些javascript。在該javascript中,檢測cookie是否存在,以及是否強制整個頁面刷新(相當於單擊F5)。注意我並不是說這是一個好主意(我認爲它是一個可怕的想法),但它可以做你期望的事情(而不是你的用戶的期望 - 這是現在發生的事情)。

另一個(更好的)選項是確保every POST does a redirect straight after to a GET。通過這種方式,當您執行Back操作時,可以返回到GET的結果(這可能會與您的期望保持一致)。


+0

表單使用Get而不是Post來提交,這仍然適用嗎? –

+0

這個想法基本上是一樣的,是的。重新定向,然後離開你。 – mjwills

+0

您使用GET表單而不是POST表單的任何特定原因? – mjwills