我创建了一个继承自ViewResult的自定义视图结果。在我的控制器中,我检查ModelState.IsValid
是否然后返回我的自定义视图。我发现这些错误似乎没有让它成为观点。这是我的观点结果:
public class EnrichedViewResult<T> : ViewResult
{
public EnrichedViewResult(string viewName, T model)
{
this.ViewName = viewName;
this.ViewData.Model = model;
}
public override void ExecuteResult(ControllerContext context)
{
base.ExecuteResult(context);
}
}
我在控制器上调用的方法:
public EnrichedViewResult<T> EnrichedView<T>(string viewName, T model){
return new EnrichedViewResult<T>(viewName, model);
}
当我在ControllerContext.Controller.ViewData.ModelState
中检查ExecuteResult
时,ModelState包含我期望的错误。
@Andras当场亮相。我需要从我的控制器传递ViewData而不仅仅是模型。最简单的方法是获取我的基本控制器的ViewData属性(与ASP.NET MVC用于ViewResult帮助器方法的相同。我将自定义ViewResult更改为接受ViewDataDictionary和我的帮助方法到下面:
public EnrichedViewResult<T> EnrichedView<T>(string viewName, T model){
if (model != null) {
ViewData.Model = model;
}
return new EnrichedViewResult<T>(viewName, ViewData);
}
答案 0 :(得分:3)
我认为你应该将ViewData
对象传递给你的结果;因为那是ModelState
的容器;不仅仅是模型。通常,您可以使用Controller的ViuewData作为起点来快捷创建/传递ViewData,在模型中写入(检查基本控制器)。
从这段代码中可以看出ModelState
没有任何方法可以将它带到视图中。