Учебники

ASP.NET MVC — Действия

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 , вы получите следующий вывод в качестве действия.

Вывод отметки сотрудника Localhost

Добавить контроллер

Давайте добавим еще один контроллер.

Шаг 1 — Щелкните правой кнопкой мыши папку «Контроллеры» и выберите «Добавить» → «Контроллер».

Добавить еще один контроллер

Появится диалоговое окно Add Scaffold.

Добавить Диалог лесов

Шаг 2 — Выберите MVC 5 Controller — Empty option и нажмите кнопку «Добавить».

Откроется диалоговое окно Add Controller.

CustomerController

Шаг 3 — Установите имя для CustomerController и нажмите кнопку «Добавить».

Теперь вы увидите новый файл C # «CustomerController.cs» в папке «Контроллеры», который также открыт для редактирования в Visual Studio.

set_name CustomerController

Аналогичным образом добавьте еще один контроллер с именем 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 . Вы увидите следующий вывод.

Localhost 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