Предыдущий ролик Следующий ролик  

Видео урок: Understanding the action result types

Основы ASP.NET MVC 5

Давайте подробнее рассмотрим различные типы результатов действий, которые может возвращать метод контроллера. Существует множество классов, унаследованных от абстрактного класса ActionResult, которые могут возвращать методы действий. Задав ActionResult в качестве возвращаемого типа действия, я мог бы возвращать в одном и том же методе разные типы при разных сценариях. Например, если я пожадничаю и не захочу предоставлять версию моего серийного номера в верхнем регистре, то могу вместо него возвращать код состояния HTTP, указывающий на то, что у пользователя нет прав на просмотр серийного номера.

Давайте рассмотрим некоторые из наиболее часто используемых типов результатов действий. Есть тип ViewResult, который действительно используется при каждом вызове метода View. Его мы используем для отображения окончательной веб-страницы, а также связанного файла макета, если таковой имеется. Есть тип PartialViewResult, который можно использовать для отображения какого-то одного раздела веб-страницы. Этот тип очень полезен, например, для извлечения некоего HTML во время выполнения Ajax-запроса. Если мы по какой-то причине хотим отделить представление от его макета, возможно, для того чтобы вложить его в другое представление, то можно вместо метода View использовать метод PartialView.

Давайте посмотрим, что произойдет, если мы переделаем действие index таким образом, чтобы оно возвращало не View, а PartialView. В результате мы увидим представление Index без его файла макета. То есть здесь пропущено все, что задано в верхнем и нижнем колонтитуле, в том числе весь CSS и JavaScript. Это не есть хорошо, поэтому мы отменим данное изменение. Мы уже видели тип ContentResult, когда возвращали серийный номер нашего банкомата. Он может дать вам практически все, что вам нужно, даже может быть полноценным HTML-документом. Но в основном это всего лишь неотформатированный текст или, возможно, некий XML.

Если вы хотите, чтобы ваш метод действия возвращал JSON, то хорошо бы использовать тип JsonResult. Воспользуемся для этого методом Json. Для примера мы могли бы с помощью этого метода создать новый неизвестный объект со свойствами name и value. И если в целях безопасности вы захотите протестировать этот метод, то нужно явно разрешить здесь запрос GET. Итак, просто передадим JsonRequestBehavior.AllowGet. Делается это в том случае, если сюда входит какая-то деликатная информация, которую кто-то с помощью вредоносного фрагмента JavaScript мог бы обманным путем заставить меня показать.

Давайте и правда построим решение по клавише Ctrl+Shift+B и введем в строке запроса /serial. В результате мы видим отформатированный JSON-объект. И если вы откроете Firebug или какой-нибудь любимый инструмент разработчика для браузеров, перейдете на вкладку "Сеть" (Net) и обновите страницу, то в разделе Response Headers увидите, что этот объект корректно определен как Content Type: Application/Json. Еще один полезный тип результата - RedirectToRouteResult.

Зачастую, например, после обработки формы, вам хочется переключиться на совершенно другое действие. У вас даже может появиться желание переключиться на действие другого контроллера. Один из способов получения такого результата - с помощью метода RedirectToAction. Если бы я решил, что пользователь больше не должен видеть этот объект, то мог бы просто перенаправить его на главную страницу сайта подобным образом. Чтобы ознакомиться с полным списком типов результатов действия, просмотрите описание класса ActionResult на сайте MSDN. В таблице будут представлены различные встроенные типы, а также методы, которые можно использовать для генерации этих типов.

Благодаря MVC вы можете с легкостью тестировать все эти типы результатов, пользуясь только своим браузером и небольшим фрагментом кода. Я бы, конечно, посоветовал вам поэкспериментировать с этими типами, чтобы лучше в них разобраться.