Вспомогательная функция тега частичного представления в ASP.NET Core

Автор: Скотт Адди (Scott Addie)

Общие сведения о вспомогательных функциях тегов см. в разделе Вспомогательные функции тегов в ASP.NET Core.

Просмотреть или скачать образец кода (описание загрузки)

Обзор

Вспомогательный элемент частичного тега используется для отрисовки частичного представления в Razor приложениях Pages и MVC. Примечания.

Параметры вспомогательной функции HTML для отрисовки частичного представления:

В примерах в этом документе используется модель Product:

namespace TagHelpersBuiltIn.Models
{
    public class Product
    {
        public int Number { get; set; }

        public string Name { get; set; }

        public string Description { get; set; }
    }
}

Далее следуют атрибуты вспомогательной функции тега частичного представления.

имя

Атрибут name является обязательным. Она указывает имя или путь для отображения частичного представления, которое будет отрисовано. Если указано имя частичного представления, запускается процесс обнаружения представления. Этот процесс пропускается, если предоставлен явный путь. Все допустимые значения name см. в разделе Обнаружение частичного представления.

Следующая разметка использует явный путь, указывающий, что _ProductPartial.cshtml требуется загрузить из общей папки. При использовании атрибута for модель передается в частичное представление для привязки.

<partial name="Shared/_ProductPartial.cshtml" for="Product">

для

Атрибут for присваивает ModelExpression атрибуту оценку для текущей модели. Класс ModelExpression выводит синтаксис @Model.. Например, можно использовать for="Product" вместо for="@Model.Product". Это поведение вывода по умолчанию переопределяется с помощью символа @ для определения встроенного выражения.

Следующая разметка загружается _ProductPartial.cshtml:

<partial name="_ProductPartial" for="Product">

Частичное представление привязывается к свойству Product соответствующей модели страницы:

using Microsoft.AspNetCore.Mvc.RazorPages;
using TagHelpersBuiltIn.Models;

namespace TagHelpersBuiltIn.Pages
{
    public class ProductModel : PageModel
    {
        public Product Product { get; set; }

        public void OnGet()
        {
            Product = new Product
            {
                Number = 1,
                Name = "Test product",
                Description = "This is a test product"
            };
        }
    }
}

модель

Атрибут model присваивает экземпляр модели для передачи в частичное представление. Атрибут model нельзя использовать с атрибутом for.

В следующей разметке создается экземпляр нового объекта Product, который передается атрибуту model для привязки:

<partial name="_ProductPartial"
         model='new Product { Number = 1, Name = "Test product", Description = "This is a test" }'>

view-data

Атрибут view-data назначает передачу ViewDataDictionary в частичное представление. В следующей разметке вся коллекция ViewData становится доступной для частичного представления:

@{
    ViewData["IsNumberReadOnly"] = true;
}

<partial name="_ProductViewDataPartial" for="Product" view-data="ViewData">

В приведенном выше коде для значения ключа IsNumberReadOnly устанавливается true, и значение добавляется в коллекцию ViewData. Следовательно, ViewData["IsNumberReadOnly"] становится доступно в следующем частичном представлении:

@model TagHelpersBuiltIn.Models.Product

<div class="form-group">
    <label asp-for="Number"></label>
    @if ((bool)ViewData["IsNumberReadOnly"])
    {
        <input asp-for="Number" type="number" class="form-control" readonly />
    }
    else
    {
        <input asp-for="Number" type="number" class="form-control" />
    }
</div>
<div class="form-group">
    <label asp-for="Name"></label>
    <input asp-for="Name" type="text" class="form-control" />
</div>
<div class="form-group">
    <label asp-for="Description"></label>
    <textarea asp-for="Description" rows="4" cols="50" class="form-control"></textarea>
</div>

В этом примере значение ViewData["IsNumberReadOnly"] определяет, будет ли поле Number отображаться только для просмотра.

Перенос из вспомогательного метода HTML

Рассмотрим следующий пример асинхронного вспомогательного метода HTML. Выполняется итерация и отображение коллекции продуктов. PartialAsync Для первого параметра _ProductPartial.cshtml метода загружается частичное представление. Экземпляр модели Product передается в частичное представление для привязки.

@foreach (var product in Model.Products)
{
    @await Html.PartialAsync("_ProductPartial", product)
}

Следующая вспомогательная функция тега частичного представления обеспечивает такую же асинхронную подготовку к просмотру, что и вспомогательный метод HTML PartialAsync. Атрибуту model назначен экземпляр модели Product для привязки к частичному представлению.

@foreach (var product in Model.Products)
{
    <partial name="_ProductPartial" model="@product" />
}

Дополнительные ресурсы