Pembantu Tag Parsial di ASP.NET Core

Oleh Scott Addie

Untuk gambaran umum tentang Pembantu Tag, lihat Pembantu Tag di ASP.NET Core.

Melihat atau mengunduh kode sampel (cara mengunduh)

Gambaran Umum

Pembantu Tag Parsial digunakan untuk merender tampilan parsial di Razor aplikasi Pages dan MVC. Pertimbangkan bahwa itu:

  • Memerlukan ASP.NET Core 2.1 atau yang lebih baru.
  • Adalah alternatif untuk sintaksIs Pembantu HTML.
  • Merender tampilan parsial secara asinkron.

Opsi Pembantu HTML untuk menyajikan tampilan parsial meliputi:

Model Produk digunakan dalam sampel di seluruh dokumen ini:

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

        public string Name { get; set; }

        public string Description { get; set; }
    }
}

Inventaris atribut Pembantu Tag Parsial mengikutinya.

nama

Atribut name tersebut diperlukan. Ini menunjukkan nama atau jalur tampilan parsial yang akan dirender. Saat nama tampilan parsial disediakan, proses penemuan tampilan dimulai. Proses itu dilewati ketika jalur eksplisit disediakan. Untuk semua nilai yang dapat name diterima, lihat Penemuan tampilan parsial.

Markup berikut menggunakan jalur eksplisit, yang menunjukkan bahwa _ProductPartial.cshtml akan dimuat dari folder Bersama . Menggunakan untuk atribut, model diteruskan ke tampilan parsial untuk pengikatan.

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

untuk

Atribut for menetapkan ModelExpression untuk dievaluasi terhadap model saat ini. Menyimpulkan ModelExpression@Model. sintaks. Misalnya, for="Product" dapat digunakan alih-alih for="@Model.Product". Perilaku inferensi default ini ditimpa dengan menggunakan @ simbol untuk menentukan ekspresi sebaris.

Markup berikut dimuat _ProductPartial.cshtml:

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

Tampilan parsial terikat ke properti model Product halaman terkait:

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

Atribut model menetapkan instans model untuk diteruskan ke tampilan parsial. Atribut model tidak dapat digunakan dengan atribut untuk .

Dalam markup berikut, objek baru Product dibuat dan diteruskan ke model atribut untuk pengikatan:

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

data tampilan

Atribut view-data menetapkan untuk diteruskan ke tampilan parsial ViewDataDictionary . Markup berikut membuat seluruh koleksi ViewData dapat diakses oleh tampilan parsial:

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

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

Dalam kode sebelumnya, IsNumberReadOnly nilai kunci diatur ke true dan ditambahkan ke koleksi ViewData. Akibatnya, ViewData["IsNumberReadOnly"] dapat diakses dalam tampilan parsial berikut:

@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>

Dalam contoh ini, nilai ViewData["IsNumberReadOnly"] menentukan apakah bidang Angka ditampilkan sebagai baca saja.

Bermigrasi dari Pembantu HTML

Pertimbangkan contoh Pembantu HTML asinkron berikut. Kumpulan produk diulang dan ditampilkan. PartialAsync Sesuai parameter pertama metode, _ProductPartial.cshtml tampilan parsial dimuat. Instans model diteruskan Product ke tampilan parsial untuk pengikatan.

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

Pembantu Tag Parsial berikut mencapai perilaku penyajian asinkron yang sama dengan Pembantu PartialAsync HTML. Atribut model diberi Product instans model untuk mengikat tampilan parsial.

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

Sumber Daya Tambahan: