ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

Джеффри Палермо

Знакомство с представлениями

Может показаться, что представления в приложении играют совсем простую роль. Их целью является прием переданной в них модели и использование данной модели для отображения содержимого приложения. В связи с тем, что контроллер и соответствующие службы уже исполнили всю бизнес-логику приложения и упаковали результаты в объект модели, представлению остается всего лишь узнать, как принять эту модель и преобразовать ее в HTML.

Несмотря на то, что данная концепция разделения далеко отходит от тех обязанностей, которыми могут быть обременены традиционные ASP.NET приложения, вы все равно должны создавать представления с должной осторожностью и осознанностью, чтобы быть уверенными в том, что процесс поддержания их в рабочем состоянии не станет слишком сложным и трудным.

Перед рассмотрением различных способов передачи данных в представления давайте исследуем то, как MVC Framework решает, каким образом должно отображаться представление.

Выбор представления для отображения

Из главы 2 вы узнали, что представление отображается при помощи метода View внутри действия контроллера. Действие Create класса GuestbookController демонстрирует данную возможность:

public ActionResult Create()
{
	return View();
}

В данном примере отображается файл Views/Guestbook/Create.cshtml. Но как MVC Framework понимает, что необходимо отобразить именно это конкретное представление, а не одно из других представлений приложения (например, Index.cshtml)?

Вызов метода View возвращает объект класса ViewResult, который знает, как отображать конкретное представление. Если этот метод вызывается без аргументов, то фреймворк подразумевает, что название представления, которое необходимо отобразить, совпадает с названием метода (Create). Далее в конвейере MVC класс ControllerActionInvoker выполняет метод ViewResult и указывает этому методу на то, что необходимо продемонстрировать представление. На данном этапе фреймворк обращается к классу ViewEngineCollection для определения местоположения этого представления (как вы уже видели в главе 2, по умолчанию движок представления выполняет поиск представлений в папках Views/<Имя контроллера> и Views/Shared).

Движки представления

Различные движки представлений отвечают за отображение представлений различных форматов. По умолчанию ASP.NET MVC поставляется с двумя движками представлений – движком представления Razor и движком Web Form. Движок представления Razor отвечает за отображение представлений в формате Razor (файлы с расширением либо .cshtml, либо .vbhtml), тогда как движок представления Web Form используется для поддержки более ранних представлений в формате Web Form (.aspx и .ascx файлы). В предыдущие версии платформы ASP.NET MVC по умолчанию входили только представления в формате Web Form.

Почему в ASP.NET MVC 3 появился новый движок представления? Начиная с релиза ASP.NET 1.0, технология Web Forms позволяла коду и разметке сосуществовать в ASPX веб-страницах рядом друг с другом. Тем не менее, общепринятая технология разработки тех времен отбивала охоту размещать в ASPX веб-страницах логику управления в виде необработанного кода на языке C#. Вместо этого разработчик стремился размещать всю логику приложения в выделенном коде. Во всех последующих релизах ASP.NET развитие ASPX-файлов, включая улучшение синтаксиса привязки данных и некоторые другие моменты, все более располагало к использованию в разработке элементов управления.

В различных MVC фреймворках для разработки представлений требуется использование кода, написанного прямо бок о бок с разметкой. Поскольку движок представления ASPX не включал в себя такую функцию, команда ASP.NET разработчиков решила создать совершенно новый движок представления, в котором применялся бы подход, сфокусированный на коде шаблона. Результатом их работы стал движок с более развитой структурой синтаксиса, который способен очень легко вычислять, где заканчивается код и начинается разметка, не заставляя при этом разработчика приводить комментарии к коду.

В ASP.NET MVC существует возможность подключения дополнительных движков представления, поэтому для отображения представлений вы можете использовать сторонние форматы. В главе 10 мы рассмотрим использование движка представления с открытым кодом Spark для отображения представлений.

Переопределение имени представления

При желании вы можете переопределить условие, согласно которому в качестве имени представления используется название действия. Например, если бы ваше представление получило название New.cshtml вместо Create.cshtml, то вы могли бы вызвать второй перегруженный метод View, который принимает в качестве параметра определенное имя представления:

return View("New");

Или же вы можете установить относительный путь к представлению, если оно отсутствует в подкаталоге, название которого совпадает с названием контроллера:

return View("~/Views/SomeOtherDirectory/New.cshtml");

Само по себе отображение представлений не очень-то и полезно – обычно нам необходимо передавать в представление некоторые данные. В следующем разделе мы рассмотрим некоторые способы достижения этой цели.

или RSS канал: Что новенького на smarly.net