Представления в ASP.NET Core MVC. Шаблонные html-хэлперы

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

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии