Кроме 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-элементов для всей модели.




