具有自定义视图结果的ModelState.IsValid

时间:2011-09-22 23:45:49

标签: asp.net-mvc-3

我创建了一个继承自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);
    }

1 个答案:

答案 0 :(得分:3)

我认为你应该将ViewData对象传递给你的结果;因为那是ModelState的容器;不仅仅是模型。通常,您可以使用Controller的ViuewData作为起点来快捷创建/传递ViewData,在模型中写入(检查基本控制器)。

从这段代码中可以看出ModelState没有任何方法可以将它带到视图中。