Общие сведения о контроллерах в ASP.NET MVC (VB)
В этом руководстве Стивен Уолтер знакомит вас с ASP.NET контроллерами MVC. Вы узнаете, как создавать новые контроллеры и возвращать различные типы результатов действий.
В этом руководстве рассматривается тема ASP.NET контроллеров MVC, действий контроллеров и результатов действий. После завершения работы с этим руководством вы узнаете, как контроллеры используются для управления взаимодействием посетителя с веб-сайтом ASP.NET MVC.
Основные сведения о контроллерах
Контроллеры MVC отвечают за реагирование на запросы к веб-сайту ASP.NET MVC. Каждый запрос браузера сопоставляется с определенным контроллером. Например, представьте, что вы вводите следующий URL-адрес в адресной строке браузера:
http://localhost/Product/Index/3
В этом случае вызывается контроллер с именем ProductController. ProductController отвечает за создание ответа на запрос браузера. Например, контроллер может возвращать определенное представление в браузер или перенаправлять пользователя на другой контроллер.
В листинге 1 содержится простой контроллер с именем ProductController.
Листинг1. Контроллеры\ProductController.vb
Public Class ProductController
Inherits System.Web.Mvc.Controller
'
' GET: /Products/
Function Index()
' Add action logic here
Return View()
End Function
End Class
Как видно из листинга 1, контроллер — это просто класс (класс Visual Basic .NET или C#). Контроллер — это класс, производный от базового класса System.Web.Mvc.Controller. Так как контроллер наследуется от этого базового класса, контроллер бесплатно наследует несколько полезных методов (мы обсудим эти методы в данный момент).
Основные сведения о действиях контроллера
Контроллер предоставляет действия контроллера. Действие — это метод контроллера, который вызывается при вводе определенного URL-адреса в адресной строке браузера. Например, представьте, что вы запрашиваете следующий URL-адрес:
http://localhost/Product/Index/3
В этом случае метод Index() вызывается для класса ProductController. Метод Index() является примером действия контроллера.
Действие контроллера должно быть открытым методом класса контроллера. Визуальные методы Basic.NET по умолчанию являются открытыми. Учтите, что любой открытый метод, добавляемый в класс контроллера, автоматически предоставляется в качестве действия контроллера (необходимо быть осторожным, так как действие контроллера может вызвать любой пользователь вселенной, просто введя правильный URL-адрес в адресной строке браузера).
Существуют некоторые дополнительные требования, которые должны быть выполнены действием контроллера. Метод, используемый в качестве действия контроллера, не может быть перегружен. Кроме того, действие контроллера не может быть статическим методом. Кроме этого, вы можете использовать практически любой метод в качестве действия контроллера.
Основные сведения о результатах действий
Действие контроллера возвращает то, что называется результатом действия. Результат действия — это то, что действие контроллера возвращает в ответ на запрос браузера.
Платформа ASP.NET MVC поддерживает несколько типов результатов действий, в том числе:
- ViewResult — представляет HTML и разметку.
- EmptyResult — не представляет результата.
- RedirectResult — представляет перенаправление на новый URL-адрес.
- JsonResult — представляет результат нотации объектов JavaScript, который можно использовать в приложении AJAX.
- JavaScriptResult — представляет скрипт JavaScript.
- ContentResult — представляет текстовый результат.
- FileContentResult — представляет скачиваемый файл (с двоичным содержимым).
- FilePathResult — представляет скачиваемый файл (с путем).
- FileStreamResult — представляет скачиваемый файл (с потоком файлов).
Все эти результаты действия наследуются от базового класса ActionResult.
В большинстве случаев действие контроллера возвращает viewResult. Например, действие контроллера индекса в листинге 2 возвращает viewResult.
Листинг 2. Controllers\BookController.vb
Public Class BookController
Inherits System.Web.Mvc.Controller
Function Index()
Return View()
End Function
End Class
Когда действие возвращает ViewResult, HTML возвращается в браузер. Метод Index() в листинге 2 возвращает в браузер представление с именем Index.
Обратите внимание, что действие Index() в листинге 2 не возвращает viewResult(). Вместо этого вызывается метод View() базового класса Controller. Как правило, результат действия не возвращается напрямую. Вместо этого вызывается один из следующих методов базового класса Controller:
- View — возвращает результат действия ViewResult.
- Redirect — возвращает результат действия RedirectResult.
- RedirectToAction — возвращает результат действия RedirectToRouteResult.
- RedirectToRoute — возвращает результат действия RedirectToRouteResult.
- Json — возвращает результат действия JsonResult.
- JavaScriptResult — возвращает javaScriptResult.
- Content — возвращает результат действия ContentResult.
- Файл — возвращает значение FileContentResult, FilePathResult или FileStreamResult в зависимости от параметров, переданных методу.
Таким образом, если вы хотите вернуть представление в браузер, вызовите метод View(). Если вы хотите перенаправить пользователя с одного действия контроллера на другое, вызовите метод RedirectToAction(). Например, действие Details() в листинге 3 либо отображает представление, либо перенаправляет пользователя на действие Index() в зависимости от того, имеет ли параметр Id значение.
Листинг 3. CustomerController.vb
Public Class CustomerController
Inherits System.Web.Mvc.Controller
Function Details(ByVal id As Integer?)
If Not id.HasValue Then
Return RedirectToAction("Index")
End If
Return View()
End Function
Function Index()
Return View()
End Function
End Class
Результат действия ContentResult является особенным. Результат действия ContentResult можно использовать для возврата результата действия в виде обычного текста. Например, метод Index() в листинге 4 возвращает сообщение в виде обычного текста, а не в формате HTML.
Листинг 4. Controllers\StatusController.vb
StatusController
System.Web.Mvc.Controller
Public Class StatusController
Inherits System.Web.Mvc.Controller
Function Index()
Return Content("Hello World!")
End Function
End Class
При вызове действия StatusController.Index() представление не возвращается. Вместо этого необработанный текст "Hello World!" возвращается в браузер.
Если действие контроллера возвращает результат, который не является результатом действия, например дату или целое число, то результат автоматически упаковывается в ContentResult. Например, при вызове действия Index() объекта WorkController в листинге 5 дата автоматически возвращается как ContentResult.
Листинг 5. WorkController.vb
Public Class WorkController
Inherits System.Web.Mvc.Controller
Function Index()
Return DateTime.Now
End Function
End Class
Действие Index() в листинге 5 возвращает объект DateTime. Платформа ASP.NET MVC преобразует объект DateTime в строку и автоматически заключает значение DateTime в ContentResult. Браузер получает дату и время в виде обычного текста.
Итоги
Цель этого руководства состояла в том, чтобы ознакомиться с основными понятиями ASP.NET контроллеров MVC, действий контроллеров и результатов действий контроллера. В первом разделе вы узнали, как добавлять новые контроллеры в проект MVC ASP.NET. Затем вы узнали, как открытые методы контроллера предоставляются вселенной в качестве действий контроллера. Наконец, мы рассмотрели различные типы результатов действий, которые могут быть возвращены действием контроллера. В частности, мы обсудили, как вернуть действия ViewResult, RedirectToActionResult и ContentResult из действия контроллера.