2011-07-11 77 views
3

我正在使用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或使用更適合我們目的的內容。

+1

後退按鈕將始終顯示原來的頁面:後退按鈕所做的就是使用上次發送給瀏覽器的html。所以這種行爲是正確的。 – awrigley

+0

我也認爲你的jQuery/Razor語法過於複雜。您應該使用Razor將tempdata注入div,並且僅使用jQuery來顯示隱藏div。 – awrigley

+0

TempData旨在跨HTTP重定向工作。也就是說,TempData被緩存。再次,你看到的行爲是由設計 – awrigley

回答

1

本質上,你想讓TempData做你想做的事情,而不是使用你想要的正確工具。

TempData在設計上旨在用於跨HTTP重定向緩存數據。這就是它的存在。從您的帖子中不清楚這是您正在使用的場景。

即:

頁重定向,與TempData的數據,即,然後顯示給用戶。刷新您到達的頁面,並且TempData不再存在(沒有重定向,只是刷新)。

如果用戶然後導航到另一個頁面,然後使用後退按鈕,瀏覽器將緩存您的頁面的html並將重新顯示該頁面。這是正確的行爲。

我也認爲在你的測試中,你錯了。也就是說,通過禁用緩存,您只需完全敲除TempData,您將無法獲得正確的行爲。也就是說,消息永遠不會出現,不僅僅是當你點擊後退按鈕時。

您的jQuery看起來效率低下。你正在做它不需要做的事情。你可以使用剃鬚刀來填充你的信息。設置DIV不顯示,即:

<div id="commonMessage" style="display:none;"> 

然後使用jQuery來顯示它:

$('#commonMessage').show(); 

您的文章沒有說清楚,但總的來說,我會說,你所看到的你應該。

也許你應該在Edit中描述你希望你的應用程序做什麼。這樣可以更容易回答。就目前情況而言,你已經告訴我們會發生什麼情況,以及你在你看來的看法,但不清楚你的期望。

你應該更好地理解TempData:它只會在控制器動作之間持續,即發生重定向時。它將數據存儲在Session存儲中,我相信這會受到您提到的緩存屬性的影響。

+0

@aweigley:正如你所看到的,我只是一個初學者在ASP MVC。你對你的觀察是正確的,我的js是無用的。我只是按照你所建議的方式改變了我的代碼,並且編輯了我的問題以提供更多關於我正在試圖實現的信息。謝謝。 – Jonathan