Могу ли я вернуть JsonResult из действия MVC и при этом воспользоваться проверкой? - PullRequest
0 голосов
/ 27 января 2009

На самом деле я еще не пробовал это и надеялся на быстрый ответ да или нет.

Я только что узнал об использовании JSonResult из полезного вопроса stackoverflow .

Мне было интересно, могу ли я использовать такой результат действия, но все же воспользоваться проверкой , предоставляемой моделью MVC ?

Если я возвращаю результат Json и появляется ошибка проверки, будет ли он просто автоматически возвращать другой тип результата, который фиксируется логикой проверки Ajax?

Ответы [ 3 ]

3 голосов
/ 27 января 2009

Что я сделал, так это написал свой собственный класс ExtendedJsonResult, который наследуется от JsonResult, первоначально для добавления возможности регистрации JavaScriptConverters в процесс сериализации, но позже это позволило мне добавить метод CheckContextForErrors, который просматривает ошибки состояния модели контекст и добавления и ошибки к данным результата json (имя свойства, значение попытки, сообщение).

Я реализовал свой собственный класс HandleJsonErrorInfo (основанный на HandleErrorInfo) и HandleJsonErrorAttribute, который объявляется в действиях, которые будут перехватывать любые необработанные исключения и возвращать сообщения об исключениях в виде JSON.

Клиентская сторона. Я могу проверить, существует ли массив ExceptionMessages в ответе JSON, а затем выполнить итерацию каждой ошибки.

2 голосов
/ 27 января 2009

Сообщения проверки по умолчанию создаются при создании ModelBind (он же принимает данные запроса и применяет их к объекту). Это можно сделать с помощью стандартной формы отправки, или Ajax, или любым другим способом.

Сообщения проверки сохраняются в ViewData.ModelState.

Визуализация сообщений проверки выполняется с помощью HtmlHelpers, которые просто смотрят на ModelState и отображают любые применимые сообщения. HtmlHelpers выполняется на стороне сервера как часть рендеринга представления. Возвращение JSON пропускает рендеринг. Вместо этого вы можете вернуть частичное представление, которое будет отображать любые сообщения проверки, которые являются частью пользовательского элемента управления.

Тем не менее, если ваша модель действий контроллера связывает и возвращает JSON, она все равно сгенерирует правильную информацию проверки в ViewData.ModelState. Эта информация есть, если вы хотите ее использовать, но ее необходимо перенести в вашу модель, а ваш JavaScript-код на стороне клиента должен знать, что с ней делать.

2 голосов
/ 27 января 2009

Нет, встроенный JsonResult просто сериализует объект, переданный Json, и отправляет его по проводам. Если вы хотите отправить ошибки проверки, вам придется поместить эту информацию в ваши собственные объекты и отправить их через Json.

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