ASP.NET MVC Framework | страница 10



>  {

>    ViewData["Message"] = "Welcome to ASP.NET MVC!";

>    return View();

>  }

>  public ActionResult About()

>  {

>    return View();

>  }

>}


На примере этого кода можно рассмотреть несколько основных концепций. Прежде всего, все классы контроллеров наследуют тип >Controller, предоставляющий инфраструктуру для обработки запросов.

Каждый из контроллеров содержит методы, возвращающие значения типа >ActionResult. В приведенном примере используется вспомогательный метод >View, возвращающий тип >ViewResult, который наследует тип >ActionResult и передает управление механизму представлений — если параметр "имя представления" не передан методу >View, то используется имя действия в качестве имени представления.

Задачей контроллера является обработка параметров запроса (в примере параметров действия не принимают, что тоже может быть в реальных приложениях — для отображения страниц, не зависящих от параметров запроса), заполнение коллекции >ViewData и передача управления движку представлений.

В данном случае, например, действие >Index поместит в коллекцию >ViewData элемент >Message, после чего передаст управление представлению Index.aspx, расположенному в папке /Views/Home.

Кроме того, в листинге 1.2 проиллюстрирована еще одна важная концепция, касающаяся кода контроллеров, — использование атрибутов для управления поведением контроллеров. Так, для того чтобы управлять поведением всего контроллера, можно установить атрибуты на класс контроллера, а для того чтобы управлять поведением конкретного действия — на соответствующий метод класса контроллера. В приведенном в листинге 1.2 коде используется атрибут для всего класса контроллера >HandleError, который инструктирует среду MVC Framework на предмет возникновения необработанного исключения в любом из методов контроллера >HomeController, необходимо будет это исключение поймать и отобразить пользователю специальную страницу с сообщением об ошибке.

Представление

В MVC Framework используется представление на основе ASPX-файлов. Так, например, рассмотрим представление Index.aspx из примера выше. Этому представлению передается коллекция >viewData с элементом >Message, значение которого должно быть отображено на странице. В листинге 1.3 приведен код этого представления.


Листинг 1.3. Представление Index.aspx

><%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"

>Inherits="System.Web.Mvc.ViewPage" %>


>

>  ContentPlaceHolderID="TitleContent" runat="server">