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

Видео урок: Employing HTML helpers

Основы ASP.NET MVC 5

В этом видео мы рассмотрим множество полезных вспомогательных методов HTML, которые повышают читабельность представлений и сокращают вероятность появления ошибок в коде. Давайте снова обратимся к файлу макета. Один из универсальных вспомогательных методов HTML - это метод ActionLink. В первом примере создается текст для ссылки, возвращающей пользователя обратно на главную страницу сайта. Если установить курсор в область параметров и нажать Ctrl+Shift+Space, то используя стрелки вверх и вниз, можно увидеть все перегрузки этого метода. Но применяемая в этом примере перегрузка отображается по умолчанию.

Указанные здесь значения - это текст ссылки, имя действия, имя контроллера, любые дополнительные значения или параметры маршрута, а последний параметр - это безымянный объект, содержащий HTML-атрибуты. Обычно к имени атрибута не добавляют префикс @, но здесь он используется, потому что в C# class - это зарезервированное слово. Для следующих трех ссылок используется другая перегрузка. Если такой способ генерации гиперссылок кажется вам сложным, вспомните о том, что URL-схема приложения иногда может изменяться.

Например, специалист по SEO-оптимизации мог сказать вам, что ваши URL придется полностью переформатировать. При таком сценарии вы бы просто обновили конфигурацию маршрутизации, а метод ActionLink сгенерировал бы новые URL автоматически. Не забывайте, что мы собирались обновить ссылки Register и Log in в представлении Index. На самом деле мы просто удалим весь текст ссылки и сгенерируем ActionLink'и. В качестве текста ссылки будем использовать "Register", имени действия - тоже "Register", а само действие относится к классу AccountController.

Нам не нужны дополнительные значения или параметры маршрута, поэтому соответствующий параметр будет равен null, но давайте сохраним CSS-атрибуты класса для стиля кнопки. Для этого передадим в безымянный объект код @class="btn btn-default", который используется и для следующей кнопки. То же самое проделаем и для кнопки "Log in". Сохраним изменения и обновим страницу. Как видите, теперь эти кнопки работают.

Вернувшись в файл макета, мы увидим еще один вспомогательный метод под названием "Partial". Метод Partial мы используем для отображения данного частичного представления в конкретном месте документа. Установите курсор в область параметров и нажмите Ctrl+Shift+Space. Как видите, существует несколько перегрузок, которые позволяют передавать данные в это представление. Как это делается, мы узнаем в следующей главе. Пока мы просто указываем, что представление _LoginPartial должно отображаться здесь. Внутри файла этого частичного представления, расположенного в папке Shared, мы видим оператор if...else, благодаря которому на экране будут появляться разные элементы в зависимости от того, авторизован ли пользователь.

Не вдаваясь в подробности этого теста, давайте прямо сейчас рассмотрим другой вспомогательный метод HTML. В этом фрагменте кода есть метод HTML.BeginForm, играющий роль открывающего тега form, в котором используется конкретное действие, контроллер, http-операция и дополнительные HTML-атрибуты. Ключевое слово using обычно применяется для того, чтобы в конце этого блока объекты автоматически высвобождались из памяти. Кроме того, подразумевается, что эта закрывающая фигурная скобка олицетворяет собой закрывающий тег form - /form.

Метод AntiForgeryToken будет генерировать скрытый элемент ввода, содержащий некий символ, который проверяется методом действия, управляющим отправкой формы, а также соответствующий cookie, который гарантирует, что любой запрос этого действия действительно исходит от одной из наших форм, а не от какого-то вредоносного источника. Чтобы выполнить валидацию этого символа, нужно добавить фильтр в метод LogOff. Откроем файл класса AccountController и в этом всплывающем списке найдем метод LogOff.

Как видите, у этого метода есть параметр ValidateAntiForgeryToken, представляющий собой фильтр действия, который проверяет форму и значение cookie и отклоняет любой запрос, содержащий невалидные символы. Как только мы научимся свободно работать с данными, мы рассмотрим еще больше вспомогательных методов HTML. А сейчас я покажу вам еще один метод - HTML.Action. Он также предназначен для отображения частичного представления, но только в тех случаях, когда нам нужно не просто отобразить содержимое конкретного представления, а сделать это путем запроса действия контроллера.

Например, вот сюда, ниже знака копирайта, мне захочется добавить серийный номер. И не забывайте, что здесь задается не представление, а действие, которое возвращает некое содержимое. Мы назвали его "Serial". Кроме того, нам нужно задать имя контроллера, "Home", для контекста, поскольку этот макет может использоваться несколькими контроллерами и необязательно HomeController. Но после сохранения изменений и обновления страницы получаем ошибку. Вернемся к методу Serial класса HomeController. Не забывайте, что мы экспериментировали с типами результатов действий и сделали так, что метод Serial перенаправляет пользователя на главную страницу. В случае извлечения контента конкретного раздела страницы, такой результат не имеет никакого смысла.

Поэтому можно снова задать для этого метода тип ContentResult или в макете в вызове действия сделать так, чтобы при передаче параметра letterCase со значением "lower" все равно возвращался неотформатированный текст. Для этого можно воспользоваться дополнительными параметрами маршрута, создать безымянный объект и передать параметр letterCase со значением "lower". Затем просто сохраняем изменения и обновляем страницу. В результате в нижнем колонтитуле видим наш серийный номер.

Итак, это видео познакомило вас со вспомогательными методами HTML. Если вы обычно создаете весь свой HTML вручную, то вам понадобится некоторое время на то, чтобы привыкнуть к этим методам, но вы поймете, что в большинстве случаев они более эффективны и надежны.