День триста шестьдесят девятый. #ЗаметкиНаПолях
ASP.NET MVC 5.
HTML Helpers. Начало
HTML helpers (помощники) - это методы, которые вы можете вызывать на свойстве Html
представления для генерации HTML-разметки. Их цель - облегчить создание представления. Например, помощник BeginForm
можно использовать для создания тега формы для формы поиска (вместо конструкции using
можно использовать помощник EndForm
, закрывающий форму):
@using (Html.BeginForm("Search", "Home", FormMethod.Get)) {Скорее всего будет выведена та же разметка, что и в предыдущем посте. Однако за кулисами помощник координирует свою работу с механизмом маршрутизации для создания правильного URL-адреса, поэтому код более устойчив к изменениям и при развертывании приложения.
<input type="text" name="q" />
<input type="submit" value="Search" />
}
Каждое представление Razor наследует свойство
Html
из своего базового класса. Свойство Html
имеет тип System.Web.Mvc.HtmlHelper<T>
, где T
- это тип модели для представления (по умолчанию dynamic
). Однако метод BeginForm
, как и большинство других, определён как метод расширения.Методы расширения используются по двум причинам:
1. Они доступны только тогда, когда пространство имён метода расширения находится в области видимости. Все методы расширения MVC для
HtmlHelper
находятся в пространстве имен System.Web.Mvc.Html
(которое находится в области видимости благодаря ссылке на него в файле Views/web.config
). Вы можете удалить его.2. Вы можете создавать собственные методы расширения для замены или дополнения встроенных помощников.
Помощники существуют для любых HTML элементов, используемых в формах:
-
Label
– метка label
- BeginForm
, EndForm
– форма form
- TextBox
– поле для ввода input type=”text”
- TextArea
– многострочное поле textarea
- CheckBox
- флажок input type=”checkbox”
- RadioButton
– переключатель input type=”radio”
- DropDownList
– выпадающий список select
- ListBox
– список с множественным выбором select multiple
- Hidden
– скрытое поле input type=”hidden”
- Password
– поле пароля input type=”password”
Большинство помощников для полей проверяют наличие значений для отображения в коллекции ViewData (ViewBag). Например, если в методе действия задать:ViewBag.Price = 10.0;а в представлении использовать
@Html.TextBox("Price")то будет выведен следующий HTML код:
<input id="Price" name="Price" type="text" value="10" />Это также работает со свойствами объектов, помещённых в
ViewData
:ViewBag.Product = new Product { Title=”Book”, Price=11 }Строго типизированные помощники
…
@Html.TextBox("Product.Title")
@Html.TextBox("Product.Price")
Тем же способом помощники можно использовать в строго типизированных представлениях. Однако для этого больше подойдут строго типизированные помощники. Они отличаются от обычных наличием суффикса For и принимают первым параметром лямбда-выражение для выбора свойства модели. Например, в строго типизированном представлении для отображения класса
Product
:@model MyStore.Models.Productможно использовать строго типизированные помощники:
@Html.TextBox(m => m.Title)Преимуществами использования строго типизированных помощников являются доступность IntelliSense, проверка ошибок во время компиляции и упрощенный рефакторинг (если вы измените имя свойства в вашей модели, Visual Studio может автоматически изменить код в представлении).
@Html.TextBox(m => m.Price)
Продолжение следует…
Источник: Jon Galloway “Professional ASP.NET MVC 5”. – John Wiley & Sons Inc., 2014. Глава 5.
>>Click here to continue<<