Предыдущий ролик Следующий ролик  

Видео урок: Working with layouts

Основы ASP.NET MVC 5

В этом видео мы посмотрим, каким образом объединить файлы представлений, рассматриваемые нами до настоящего момента, с файлом макета, чтобы в итоге получить полноценную веб-страницу. В результате вызова действия index класса HomeController возвращается представление, соответствующее названию действия. Его содержимое находится в файле представления Index. Но очевидно, что это еще не все, поскольку в этом файле отсутствует основная структура нашего HTML-документа, в том числе, верхний и нижний колонтитул. Я уже говорил о том, что основная структура определяется в файле _Layout.cshtml, который расположен в папке Views -> Shared.

Но откуда движок представлений знает, что структуру нужно искать именно здесь? Итак, сообщить движку представления, что он должен использовать конкретный файл макета, можно посредством задания значения свойства layout в самом верху файла представления. Чтобы проверить такую возможность, присвоим свойству layout имя несуществующего макета. Сохраним изменения и обновим главную страницу. После этого движок представлений пожалуется нам, что не может найти указанный макет. Кстати, если вы видите универсальную страницу с ошибкой, то скорее всего, у вас с предыдущего упражнения остался включенным режим показа ошибок для пользователей, поэтому вернитесь и установите значение "RemoteOnly" или просто удалите этот элемент из файла Web.config.

Это одно из тех мест, в которых можно задавать файл макета. Очевидно, таким образом переопределяется файл макета, который уже был задан до этого. Закомментируем эту строку и рассмотрим файл ViewStart.cshtml из папки Views. Файл ViewStart - отличный способ применить свойства ко всем представлениям одновременно. Вместо того чтобы добавлять свойство layout в каждое отдельное представление, можно один раз определить его в файле ViewStart. Благодаря этому можно быстро применять один и тот же файл макета ко всем представлениям и повторно использовать универсальные элементы, например, верхний и нижний колонтитулы.

Если вам нужна большая гибкость, можете также добавить папку ViewStart в любой подкаталог. И не забывайте, что при необходимости можно переопределить файл макета для каждого отдельного представления. Теперь давайте проанализируем файл макета. В начале следующего видео мы коснемся таких методов, как Styles.Render, Scripts.Render и вспомогательные методы HTML. Сейчас мне хотелось бы остановить ваше внимание вот на этом вызове RenderBody.

Именно в этом месте содержимое файла представления внедряется в макет. Однако сюда вставляется не все содержимое файла представления. Обратите внимание, что перед закрывающим тегом body выполняется вызов RenderSection. Это означает, что сюда должна быть передана секция файла представления под названием "scripts", если она, конечно, существует. Параметр required имеет значение "false", поэтому в случае отсутствия в файле представления секции scripts она будет просто пропущена. В файле Index нет секции scripts, но давайте посмотрим, что будет, если добавить сюда такую секцию.

Сделаем это с помощью следующего синтаксиса. Сохраним изменения, обновим страницу и посмотрим на ее исходный код. Вот здесь ниже есть секция scripts. Наконец, давайте выполним некоторые настройки нашего приложения в файле макета и в файле представления Index. Поменяем вот здесь заголовок на "MVC Bank" (Банк MVC), текст ссылки тоже поменяем на "MVC Bank", а также поменяем знак копирайта в нижнем колонтитуле.

В представление Index также внесем несколько изменений. На самом деле аббревиатура MVC расшифровывается как "Middle Valley Community" (Район Средняя долина). Банк Middle Valley Community - это небольшая, но передовая организация, предлагающая клиентам систему банкоматов с веб-интерфейсом, и конечно, веб-интерфейс построен с помощью ASP.NET. Спустившись на три кнопки вниз, я удалю третью и изменю первую таким образом, что теперь на ней будет написано "Register" (Зарегистрироваться), а также поменяю текст ссылки на "Register". На второй кнопке будет надпись "Log in" (Войти в систему).

Сами ссылки мы обновим в следующем видео, когда будем обсуждать класс HtmlHelper. Давайте сохраним изменения и посмотрим, что произойдет. Этот пример позволяет понять, каким образом с помощью макетов можно повторно использовать элементы страницы и отображать основное содержимое представления, а также любые разделы, которые могут в него входить.