ASP.NET MVC Action Methods отвечает за выполнение запросов и генерацию ответов на них. По умолчанию он генерирует ответ в форме ActionResult. Действия обычно имеют взаимно-однозначное сопоставление с пользовательскими взаимодействиями.
Например, введите URL-адрес в браузер, щелкните любую конкретную ссылку, отправьте форму и т. Д. Каждое из этих взаимодействий пользователя приводит к отправке запроса на сервер. В каждом случае URL-адрес запроса включает в себя информацию, которую платформа MVC использует для вызова метода действия. Единственное ограничение метода действия — это то, что они должны быть методом экземпляра, поэтому они не могут быть статическими методами. Также нет ограничений на возвращаемое значение. Таким образом, вы можете вернуть строку, целое число и т. Д.
Обработка запросов
Действия являются конечным пунктом назначения запроса в приложении MVC, и оно использует базовый класс контроллера. Давайте посмотрим на обработку запроса.
-
Когда приходит URL, например / Home / index, именно UrlRoutingModule проверяет и понимает, что что-то, настроенное в таблице маршрутизации, знает, как обрабатывать этот URL.
Когда приходит URL, например / Home / index, именно UrlRoutingModule проверяет и понимает, что что-то, настроенное в таблице маршрутизации, знает, как обрабатывать этот URL.
-
UrlRoutingModule объединяет информацию, которую мы настроили в таблице маршрутизации, и передает управление обработчику маршрута MVC.
-
Обработчик маршрута MVC передает контроллер MvcHandler, который является обработчиком HTTP.
-
MvcHandler использует фабрику контроллеров для создания экземпляра контроллера и знает, какой контроллер создать, потому что он ищет в RouteData значение этого контроллера.
-
Когда у MvcHandler есть контроллер, единственная вещь, о которой MvcHandler знает, — это интерфейс IController, поэтому он просто указывает контроллеру выполнить.
-
Когда он сообщает контроллеру о выполнении, он получен из базового класса контроллера MVC. Метод Execute создает активатор действия и сообщает, что активатор действия должен пойти и найти метод для вызова, найти действие для вызова.
-
Вызывающий действие снова просматривает данные RouteData и находит тот параметр действия, который был передан из механизма маршрутизации.
UrlRoutingModule объединяет информацию, которую мы настроили в таблице маршрутизации, и передает управление обработчику маршрута MVC.
Обработчик маршрута MVC передает контроллер MvcHandler, который является обработчиком HTTP.
MvcHandler использует фабрику контроллеров для создания экземпляра контроллера и знает, какой контроллер создать, потому что он ищет в RouteData значение этого контроллера.
Когда у MvcHandler есть контроллер, единственная вещь, о которой MvcHandler знает, — это интерфейс IController, поэтому он просто указывает контроллеру выполнить.
Когда он сообщает контроллеру о выполнении, он получен из базового класса контроллера MVC. Метод Execute создает активатор действия и сообщает, что активатор действия должен пойти и найти метод для вызова, найти действие для вызова.
Вызывающий действие снова просматривает данные RouteData и находит тот параметр действия, который был передан из механизма маршрутизации.
Типы действий
Действия в основном возвращают различные типы результатов действий. Класс ActionResult является базой для всех результатов действий. Ниже приведен список различных видов результатов действий и их поведения.
Sr.No. | Имя и поведение |
---|---|
1 |
ContentResult Возвращает строку |
2 |
FileContentResult Возвращает содержимое файла |
3 |
FilePathResult Возвращает содержимое файла |
4 |
FileStreamResult Возвращает содержимое файла |
5 |
EmptyResult Ничего не возвращает |
6 |
JavaScriptResult Возвращает скрипт для исполнения |
7 |
JsonResult Возвращает данные в формате JSON |
8 |
RedirectToResult Перенаправляет на указанный URL |
9 |
HttpUnauthorizedResult Возвращает код состояния HTTP 403 |
10 |
RedirectToRouteResult Перенаправляет на другое действие / другое действие контроллера |
11 |
ViewResult Получен в качестве ответа для просмотра движка |
12 |
PartialViewResult Получен в качестве ответа для просмотра движка |
ContentResult
Возвращает строку
FileContentResult
Возвращает содержимое файла
FilePathResult
Возвращает содержимое файла
FileStreamResult
Возвращает содержимое файла
EmptyResult
Ничего не возвращает
JavaScriptResult
Возвращает скрипт для исполнения
JsonResult
Возвращает данные в формате JSON
RedirectToResult
Перенаправляет на указанный URL
HttpUnauthorizedResult
Возвращает код состояния HTTP 403
RedirectToRouteResult
Перенаправляет на другое действие / другое действие контроллера
ViewResult
Получен в качестве ответа для просмотра движка
PartialViewResult
Получен в качестве ответа для просмотра движка
Давайте посмотрим на простой пример из предыдущей главы, в которой мы создали EmployeeController.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCControllerDemo.Controllers { public class EmployeeController : Controller{ // GET: Employee public ActionResult Search(string name){ var input = Server.HtmlEncode(name); return Content(input); } } }
Когда вы запрашиваете следующий URL-адрес http: // localhost: 61465 / Employee / Mark , вы получите следующий вывод в качестве действия.
Добавить контроллер
Давайте добавим еще один контроллер.
Шаг 1 — Щелкните правой кнопкой мыши папку «Контроллеры» и выберите «Добавить» → «Контроллер».
Появится диалоговое окно Add Scaffold.
Шаг 2 — Выберите MVC 5 Controller — Empty option и нажмите кнопку «Добавить».
Откроется диалоговое окно Add Controller.
Шаг 3 — Установите имя для CustomerController и нажмите кнопку «Добавить».
Теперь вы увидите новый файл C # «CustomerController.cs» в папке «Контроллеры», который также открыт для редактирования в Visual Studio.
Аналогичным образом добавьте еще один контроллер с именем HomeController. Ниже приведена реализация класса HomeController.cs.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCControllerDemo.Controllers { public class HomeController : Controller{ // GET: Home public string Index(){ return "This is Home Controller"; } } }
Шаг 4 — Запустите это приложение, и вы получите следующий вывод.
Шаг 5 — Добавьте следующий код в контроллер клиента, который мы создали выше.
public string GetAllCustomers(){ return @"<ul> <li>Ali Raza</li> <li>Mark Upston</li> <li>Allan Bommer</li> <li>Greg Jerry</li> </ul>"; }
Шаг 6 — Запустите это приложение и запросите http: // localhost: 61465 / Customer / GetAllCustomers . Вы увидите следующий вывод.
Вы также можете перенаправить действия для того же контроллера или даже для другого контроллера.
Ниже приведен простой пример, в котором мы будем перенаправлять из HomeController в Customer Controller, изменяя код в HomeController, используя следующий код.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCControllerDemo.Controllers{ public class HomeController : Controller{ // GET: Home public ActionResult Index(){ return RedirectToAction("GetAllCustomers","Customer"); } } }
Как видите, мы использовали метод RedirectToAction () ActionResult, который принимает два параметра: имя действия и имя контроллера.
Когда вы запустите это приложение, вы увидите, что маршрут по умолчанию перенаправит его в / Customer / GetAllCustomers