Знакомство с представлениями
Может показаться, что представления в приложении играют совсем простую роль. Их целью является прием переданной в них модели и использование данной модели для отображения содержимого приложения. В связи с тем, что контроллер и соответствующие службы уже исполнили всю бизнес-логику приложения и упаковали результаты в объект модели, представлению остается всего лишь узнать, как принять эту модель и преобразовать ее в 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");
Само по себе отображение представлений не очень-то и полезно – обычно нам необходимо передавать в представление некоторые данные. В следующем разделе мы рассмотрим некоторые способы достижения этой цели.