-помощники

Представления используют разметку HTML для визуализации содержимого. Однако фреймворк ASP.NET MVC обладает также таким мощным инструментом, как HTML-помощники (helper), которые могут генерировать требуемый HTML-код. HTML-помощники не совсем тоже самое, что серверные ЭУ Web Form, но они ближе всего к ним в технологии ASP.Net MVC.

Стандартные HTML-помощники

Фреймворк MVC предоставляет большой набор встроенных HTML-помощников, которые позволяют генерировать разметку для работы с HTML-формами (табл. 4.11).

HTML-помощник BeginForm принимает в качестве параметров имя метода действия, имя контроллера и используемый HTTP-метод (с помощью перечисления FormMethod). Например:

Html.BeginFormfBuy", "Home", FormMethod.Post)

Для того чтобы автоматически добавлялся тэг завершения формы, HTML-помощник BeginForm используется следующим образом:

@using(Html.BeginForm("Buy”, "Home", FormMethod.Post)) {

<input type="hidden" value="@ViewBag.Bookld" name-'Bookld" />

}

Таблица 4.11

Основные HTML-помощники

Метод

Описание

BeginForm

Возвращает HTML-строку для HTML-формы

ActionLink,

RouteLink

Возвращает HTML-строку для HTML ссылки

DropDownList

Возвращает HTML-строку для выпадающего списка

ListBox

Возвращает HTML-строку для list box

TextArea

Возвращает HTML-строку для text area

В этом случае будет создан следующий HTML-код:

<form method="post" action=7Home/Buy”>

"input type="hidden" value=''@ViewBag.Bookld'' name="Bookld" />

</form>

Если вызов страницы с формой и отправка формы осуществляется одним и тем же действием (как например, Buy), то в этом случае в помощнике Html.BeginForm можно параметры не указывать:

@using(Html.BeginForm()) {...}

В состав стандартных HTML-помощников входят помощники для ввода информации практически для всех HTML-элементов управления. Все базовые HTML-помощники используют как минимум два параметра: первый параметр – значение атрибута id или name; второй параметр – значение атрибута value.

Помощник Html.TextBox генерирует тег input со значением атрибута type, равным text. Данный помощник используется для получения разметки ввода информации пользователем. Например:

@Html.TextBox("TextBox1'', ViewBag.DefauItText)

Помощник Html.Hidden используется для формирования скрытого поля input type="hidden". Например, вызов помощника: @Html.Hidden("Bookld", "2") сгенерирует разметку:

"input id="Bookld” name="Bookld" type="hidden" value=”2'' />

А при передаче переменной из ViewBag нужно привести ее к типу string:

@Html.Hidden("Bookld", (string) @ViewBag.Bookld)

Помощник Html.Password создает поле для ввода пароля. Он похож на помощника TextBox, но вместо введенных символов отображает маску пароля. Например: @Html.Password("UserPassword", "val")

генерирует разметку:

<input id="UserPassword" name=”UserPassword'' type="password" value="val" />

Помощник Html.RadioButton используется для создания переключателей. Он генерирует элемент input со значением type="radio”. Для создания группы переключателей надо присвоить всем им одно и то же имя (свойство name). Например:

@Html.RadioButtonf'color", "red") <span>KpacHbiii</span> <br />

@Html.RadioButton(”color", "blue") <span>cnHHH</span> <br/>

@Html.RadioButton("color", "green", true) <span>3eneHbM</span>

Такой код создает следующую разметку:

<input id="color" name="color" type="radio" value="red"/>

<span>красный</span> <br />

<input id="color" name="color" type="radio" value="blue" />

<span>синий</span> <br />

<input checked="checked" id="color" name="color" type="radio" value="green" />

<span>зеленый</span>

Помощник Html.CheckBox может применяться для создания сразу двух элементов. Например:

@Html.CheckBox("Enable", false)

будет генерировать следующий HTML:

<input id="Enable" name="Enable" type="checkbox" value="true" />

<input name="Enable" type="hidden" value="false" />

To есть кроме собственно поля флажка еще и генерируется скрытое поле. Оно нужно в связи с тем, что браузер посылает значение флажка только тогда, когда флажок выбран или отмечен. А скрытое поле гарантирует, что для элемента Enable будет установлено значение, даже если пользователь не отметил флажок.

Помощник Html.Label создаег элемент <label/>, а параметр, передаваемый в помощник, задает значение атрибута for и одновременно текст для элемента. Например, объявление помощника Html.Label(Name”) создает следующую разметку:

<label for="Name">Name</label>

Элемент label представляет простую метку, предназначенную для прикрепления информации к элементам ввода, например к текстовым полям. Атрибут for элемента label должен содержать ID ассоциированного элемента ввода. Если пользователь нажимает на метку, то браузер автоматически передает фокус связанному с этой меткой элементу ввода.

Помощник Html.DropDownList создает выпадающий список, то есть элемент "select />. Для генерации такого списка нужна коллекция Select- List, которая содержит объекты SelectListltem, описывающие элементы списка. Объект SelectListltem имеет свойство Text (отображаемый текст), свойство Value (само значение, которое может не совпадать с текстом) и свойство Selected (указывает, выбран данный элемент или нет).

Например, в выпадающем списке можно показать коллекцию элементов Book, которая передается в представление с помощью объекта ViewBag:

BookContext db = new BookContext();

SelectList books = new SelectList(db.Books, "Author", "Name");

ViewBag.Books = books;

В конструкторе объекта SelectList задается:

  • • набор значений для списка (db.Books);
  • • название свойства модели Book, которое будет использоваться в качестве значения (Author);
  • • название свойства модели Book, которое будет использоваться для отображения в списке (Name).

В представлении созданный объект типа SelectList, содержащийся в ViewBag.Books, можно использовать следующим способом:

@Html.DropDownList("Author”, (SelectList) ViewBag.Books)

Помощник ActionLink формирует тег <a>. При его описании первый параметр задает наименование ссылки, второй – имя метода-действия, третий – имя контроллера, четвертый параметр – идентификатор. Например, если задано:

@Html.ActionLink(“Выполнить расчет”, “Calcule", “Store", new (id = 1})

то будет создаваться следующая гиперссылка:

<а href="/Store/Calcule/1">Выполнить вычисление</а>

В качестве примера шаблон представления, показанный на рис. 4.47, можно переписать с помощью HTML-помощников, как показано на рис. 4.48.

Представление для метода [HttpGet] Buy (int id), записанное с помощью HTML-помощников

Рис. 4.48. Представление для метода [HttpGet] Buy (int id), записанное с помощью HTML-помощников

Строго типизированные HTML-помощники

Для базовых помощников в ASP.NET MVC имеются их строго типизированные двойники (DropDownListFor, ListBoxFor, TextAreaFor). Они могут использоваться только в строго типизированных представлениях и неявно работают с моделью, переданной в представление.

Представление для метода [HttpGet] Buy (int id), записанное с помощью HTML-помощников

Рис. 4.49. Представление для метода [HttpGet] Buy (int id), записанное с помощью HTML-помощников

В качестве параметра этих помощников задается лямбда-выражение, описывающее краткий алгоритм определения свойства модели, с которым будет работать данный помощник. Например, в помощнике

@Html.TextBoxFor(m=>m.Person)

указывается, что он будет работать со свойством Person модели. Имя, обозначающее модель (в данном случае т), может быть любым. Оно будет неявно связываться с моделью представления. Этот же помощник можно записать и другими способами:

@Html.TextBoxFor(model=>model. Person)

или

@Html.TextBoxFor(c=>c.Person).

В качестве примера шаблон представления, показанный на рис. 4.47, можно переписать с помощью строго типизированных HTML-помощников, как показано на рис. 4.49.

Кроме стандартных HTML-помощников (формирующих определенные элементы разметки HTML), фреймворк MVC также имеет шаблонные HTML-помощники (табл. 4.12).

Они являются более гибкими по сравнению со стандартными помощниками, так как для них не требуется описывать, как нужно создавать элемент разметки и какой тип помощника использовать. Шаблонному помощнику просто сообщается используемое свойство модели, а он сам определяет, какой HTML-элемент сгенерировать, исходя из типа свойства и его атрибутов (см. раздел 4.2.5).

Шаблонные HTML-помощники

Таблица 4.12

Основные шаблонные HTML-помощники

Метод

Описание

Display

создает для указанного свойства модели доступный только для чтения элемент разметки, например Html.DisplayfName")

Editor

создает для указанного свойства модели доступный для редактирования элемент разметки, например Html.Editor("Name")

DisplayText

создает выражение для указанного свойства модели в виде простой строки, например Html.DisplayTextfName")

Для шаблонных помощников также имеются строго типизированные аналоги:

  • • DisplayFor – строго типизированный аналог помощника Display: Html.DisplayFor(e => e.Name); если в модели будет задан атрибут, [Dis- play(Name = "хххх")], то в качестве имени будет показываться заданное значение "хххх";
  • • EditorFor – строго типизированный аналог помощника Editor: Html.EditorFor(e => e.Name);
  • • DisplayTextFor – строго типизированный аналог помощника Display- Text, например Html.DisplayTextFor(e => e.Name)

Кроме шаблонных помощников, которые используются для отдельного свойства модели, есть еще несколько помощников, которые позволяют сгенерировать сразу все поля для заданной модели:

  • • Html.DisplayForModel() – создает поля для чтения для всех свойств модели;
  • • EditorForModel() – создает поля для редактирования для всех свойств модели.

Например, если в контроллере Home создать некоторое действие BookView, которое по id будет выводить информацию об указанной книге:

public ActionResult BookView(int id) {

var book = db.Books.Find(id); if (book != null) {return View(book);}

return Viewflndex");

}

то для него можно создать строго типизированное представление BookView.cshtml, в котором все поля будут формироваться с помощью одного помощника:

@{ Layout = "-/Views/Shared/ Layout.cshtml";}

@model Bookstore.Models.Book <й2>Книга № @Model.ld</h2>

@Html.DisplayForModel()

Если обратиться к действию BookView, задав в адресной строке маршрут Home/BookView/1, то будет показана следующая страница:

Результат выполнения HTML-помощника @Html.DisplayForModel()

Рис. 4.50. Результат выполнения HTML-помощника @Html.DisplayForModel()

В качестве примера использования HTML-помощника EditorFor для редактирования модели создадим метод-действие для редактирования книги (модель Book), которое получает идентификатор Id и выводит поля для редактирования в представлении:

В данном методе в качестве параметра используется тип int?, на случай если пользователи нс укажут в маршруте id. Если параметр id нс задается, то передается значение null и будет возвращаться результат HttpNotFound.

В представлении может использоваться следующий набор HTML- помощников EditorFor:

Так как уникальный идентификатор id книги редактировать не надо, то поле для его отображения делается скрытым, то есть используется помощник Html.HiddenFor.

 
< Пред   СОДЕРЖАНИЕ     След >