2011-01-19 34 views
0

而不是一個快速解決方案我更想知道別人在做什麼。製作ModelState持久,但不是太持久

的問題是,我使用的ModelState爲用戶的錯誤/驗證報告,但是當我使用一個RedirectToAction(),該ModelState中丟失。爲了克服這個問題,我添加了一些代碼,我們的基本控制器(所有其他控制器繼承),在OnActionExecuting的覆蓋,我說:

if (TempData["ModelState"] != null && !ModelState.Equals(TempData["ModelState"])) 
    ModelState.Merge((ModelStateDictionary)TempData["ModelState"]); 

而在OnActionExecuted的覆蓋,我說:

TempData["ModelState"] = ModelState; 

問題在於這意味着某些錯誤信息可能顯示在錯誤的頁面上。我只是在開始的時候運行一個ModelState.clear(),我知道它會覆蓋/糾正當前的錯誤,但有些情況下它不會被清除,並且會在奇怪的地方顯示錯誤。

其他人怎麼處理?任何想法的歡迎。由於

回答

1

我已經實現了在這裏提到的解決方案:

http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx

在13點

(使用PRG模式的數據修改)。

它看起來非常相似,你在做什麼,但使用措施篩選器和我都沒有注意到的錯誤頁面爲還沒有任何錯誤消息。

+0

我找到了'如果(filterContext.Result是的ViewResult)`部分沒有工作,因爲我的成績一直是空的,但採取了這一點,它的工作就像一個魅力。謝謝 – Ben 2011-01-27 17:36:53

0

如果我要做到這一點,我會用緩存和存儲的ModelState在使用組合鍵(會議/控制器/動作)高速緩存(可能會)。 2分鐘後過期。

這樣,而你卻被不是要重用那些可能已寫的其他一些行動ModelState中,你不要擔心「這是正確的模型視圖?」

然後,您可以創建適用於每次要重新加載的ModelState中,或者只是做它會自動從基於路由上的基本控制器方法的屬性。