我正在使用TempData向用戶顯示消息。我在TempData中放了一個字符串,後來我讀取了字符串,如果它不是空的,那麼我將顯示一個包含該消息的DIV。使用ASP MVC TempData向用戶顯示messaje的問題
所有的工作正常,如果用戶刷新頁面的消息不顯示(這就是我想要的)。問題是,如果用戶導航到其他頁面,然後按下瀏覽器中的後退按鈕,則會再次顯示該消息,而我不希望這樣。
我該怎麼做才能避免這種行爲?
謝謝。
這是我用來讀取TempData(Razor + VB)的代碼。有一個DIV #commonMessage,用這段代碼把字符串放在div中並顯示出來。正如我之前所說,它工作正常,但唯一的問題是如果用戶在瀏覽器中單擊,TempData仍然存在。
@If Not IsNothing(TempData("MessageUser")) AndAlso TempData("MessageUser") <> String.Empty Then
Dim str As String = TempData("MessageUser")
@<script type="text/javascript">
$(document).ready(function() {
$('#commonMessage').html("@str");
$('#commonMessage').delay(400).slideDown(400).delay(4000).slideUp(400);
})
</script>
End If
編輯:好像被逮住了TempData的,因爲如果我禁用哪裏我顯示消息的操作緩存(使用屬性System.Web.Mvc.OutputCache(NoStore:=True, Duration:=0, VaryByParam:="*")
)問題自敗。但它會更好,我可以找到一種方法,不涉及禁用緩存...
請求編輯:我很新來的ASP,所以我試圖澄清我正在triying做什麼。當用戶執行操作(例如編輯客戶端)時,我將客戶端重定向到客戶端列表頁面,然後顯示一條消息告訴用戶「客戶端數據已經過時更新」。我正在試圖以一種讓消息只顯示一次的方式進行。也許TempData不是正確的方式(我不知道,因爲我還在學習),但目標是僅向用戶顯示一條消息(無論是刷新還是用戶轉到其他頁面,然後在瀏覽器中按回)...使用TempData或使用更適合我們目的的內容。
後退按鈕將始終顯示原來的頁面:後退按鈕所做的就是使用上次發送給瀏覽器的html。所以這種行爲是正確的。 – awrigley
我也認爲你的jQuery/Razor語法過於複雜。您應該使用Razor將tempdata注入div,並且僅使用jQuery來顯示隱藏div。 – awrigley
TempData旨在跨HTTP重定向工作。也就是說,TempData被緩存。再次,你看到的行爲是由設計 – awrigley