Движки представления. Движок представления обрабатывает ASP.NET контент и ищет инструкции, как правило, для вставки динамического контента в выходные данные, отправленные браузеру. На данный момент платформа ASP.NET включает два встроенных движка представления:
- Движок Razor. Более современный, с простым и удобным синтаксисом
- Движок ASPX, также известный как движок представлений Web Forms, использует синтаксис тегов Web Forms <% ...%>. Этот движок используется для поддержки совместимости в старых приложениях MVC.
Движок представления реализует интерфейс IViewEngine:
Задача движка представлений заключается в преобразовании запросов к представлениям в объекты ViewEngineResult. Первые два метода в интерфейсе, FindView и FindPartialView, принимают параметры, в которых указывается запрос и обработавший его контроллер (объект ControllerContext), имя представления и его макет, а также сообщение о том, может ли движок представлений использовать предыдущий результат из кэша. Эти методы вызываются во время обработки ViewResult. Последний метод, ReleaseView, вызывается, когда представление больше не требуется.
Последним структурным элементом движка представления является интерфейс IView. Мы передаем реализацию IView в конструктор объекта ViewEngineResult, который будет позже возвращен из методов движка представления. MVC Framework вызывает метод Render. Параметр ViewContext предоставляет информацию о запросе клиента и выводе метода действия. Параметр TextWriter записывает ответ клиенту.
Способы передачи данных в представление из методов контроллера.
Строго-типизированные представления - представления, для которых указана модель представления.
ViewBag |
Динамический словарь из пар ключ-значение. Не нужно приведение типов |
контроллер: ViewData[“Message”] = “Hello”; view: <h1>@ViewData[“Message”]</h1> |
ViewData |
Подобен ViewData. Но для использования сложных объектов в представлении нужно приведение типов |
контроллер: ViewBag.Message = “Hello”; view: <h1>@ViewBag.Message</h1> |
TempData |
Как ViewData, представляет словарь пар ключ-значение, но позволяет сохранять значение в течении всего текущего запроса, пока не будет извлечено. |
контроллер: TempData[“Message”] = “Hello”; view: <h1>@TempData[“Message”]</h1> |
Модель представления |
В представлении через @model устанавливается модель представления. Тип модели = тип объекта, переданного в метод View(). |
контроллер: return View(new List<int>{1,2}); view: @model List<int> <b>@string.Join(“, “, Model)<b> |