ModelState.IsValid с пользовательским результатом просмотра - PullRequest
2 голосов
/ 23 сентября 2011

Я создал собственный результат просмотра, который наследуется от 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 содержит ошибки, так как яожидал.

[Обновление]

@ Андрас был на месте.Мне нужно было передать 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 Ответ

3 голосов
/ 23 сентября 2011

Я думаю, вы должны передать объект ViewData вашему результату; так как это контейнер ModelState; не просто модель. Обычно вы затем сокращаете создание / передачу ViewData, используя ViuewData контроллера в качестве отправной точки, записывая в модель (проверьте базовый контроллер).

Из этого кода нет никакого способа, которым ModelState может добраться до вида.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...