2011-01-19 33 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中,或者只是做它会自动从基于路由上的基本控制器方法的属性。