Кроме html-хелперов форм, которые создают различные элементы формы, в ASP.NET Core MVC также имеются, так называемые, шаблонные хелперы, которые, не генерируют определенный html-элемент, а анализируют свойство модели и на основании проведенного анализа подбирают и создают наиболее подходящий html-элемент.
Шаблонные хэлперы, условно, можно разделить на две группы: одиночные (анализируют отдельное свойство модели) и групповые (анализируют все свойства модели). Также, шаблонные хэлперы могут быть строго типизированными.
Одиночные шаблонные хэлперы
В ASP.NET Core MVC на данный момент можно выделить следующие одиночные шаблонные хэлперы:
Обычный | Строго типизированный | Описание |
Display |
DisplayFor |
Создает элемент разметки для отображения значения указанного свойства модели |
Editor |
EditorFor |
Создает элемент разметки для редактирования указанного свойства модели |
DisplayText |
DisplayTextFor |
Создает выражение для указанного свойства модели в виде простой строки. По сравнению с Display и DisplayFor имеет более широкие возможности отображения значений в html |
DisplayName |
DisplayNameFor |
Создает элемент разметки для отображения имени указанного свойства модели |
Чтобы продемонстрировать работу этих хэлперов, создадим новое приложение ASP.NET Core MVC, добавим в папку Models файл Post.cs со следующим классом:
namespace AspHtmlHelpers.Models { public class Post { public int Id { get; set; } public string Title { get; set; } public string Author { get; set; } public string Body { get; set; } } }
Теперь в контроллере HomeController изменим действие Index следующим образом:
public IActionResult Index() { Post post = new() { Author = "admin", Title = "Название статьи", Body = "Пример текста статьи" }; return View(post); }
Теперь изменим представление Views/Home/Index.cshtml следующим образом:
@model Post @Html.DisplayFor(p=>Model.Author);<br/> @Html.DisplayFor(p=>Model.Title)<br /> @Html.DisplayFor(p=>Model.Body)
Запустим приложение и посмотрим на результат:
Теперь изменим код представление так:
@model Post @Html.DisplayNameFor(p=>Model.Author) <br/> @Html.EditorFor(p=>Model.Author) <br /> @Html.DisplayNameFor(p=>Model.Title) <br /> @Html.EditorFor(p=>Model.Title) <br /> @Html.DisplayNameFor(p=>Model.Body) <br /> @Html.EditorFor(p=>Model.Body)
Результат:
Здесь обращает на себя внимание то, что html-элемент для ввода текста статьи — это обычный input
, хотя, логичнее было бы здесь сделать многострочный элемент textarea
. Чтобы это сделать нам придется немного забежать вперед в изучении ASP.NET Core MVC и добавить в класс Post
следующий атрибут:
public class Post { public int Id { get; set; } public string Title { get; set; } public string Author { get; set; } [DataType(DataType.MultilineText)] public string Body { get; set; } } }
Теперь запустим приложение и убедимся, что для текста статьи используется многострочный редактор:
Групповые шаблонные хэлперы
Эти хэлперы проводят анализ всех свойств модели.
DisplayForModel |
Создает поля для чтения для всех свойств модели |
DisplayTextForModel |
Создает поля для чтения для всех свойств модели в виде строки |
EditorForModel |
Создает поля для редактирования для всех свойств модели |
Изменим код представления следующим образом:
@model Post @Html.DisplayForModel()
В итоге, получим следующий результат:
Теперь создадим редакторы для свойств модели:
@model Post @Html.EditorForModel()
Результат:
Итого
Шаблонные html-хэлперы создают html-элементы представления на основании анализа свойств модели, передаваемой в представление. Такие хэлперы могут создавать как отдельные поля для свойств модели, так и генерировать сразу набор html-элементов для всей модели.