PartialViewها یک نوع خاص از Viewها هستند که برای جداسازی و سازماندهی بهتر کد و نمایش بخشهای تکراری یا قابل استفاده مجدد از UI استفاده میشوند. PartialViewها به شما این امکان را میدهند که بخشهایی از صفحات وب را جداگانه تعریف کرده و در صفحات مختلف استفاده کنید، بدون اینکه نیاز باشد کد تکراری بنویسید. در ادامه به آموزش کار با Partial View ها میپردازیم.
Partial View یک فایل .cshtml است که درون فولدر View در MVC یا Pages در Razor Pages قرار دارد. در ASP.NET Core MVC ، View Result یک کنترلر هم می تواند View و هم Partial View را بازگرداند(Return کند). در Razor Pages نیز یک PageModel می تواند Partial View را به عنوان PartialViewResult برگرداند. نام فایل های Partial View معمولا با پیشوند(_) شروع می شوند برای مثال: _Header.cshtml، _Footer.cshtml. این مدل نامگذاری اجباری نیست، اما تفاوت Partial View ها را از View های اصلی مشخص می کند.
بهترین پوشه برای ایجاد PartialViewها در ASP.NET Core معمولاً پوشه Views/Shared است. این پوشه به طور پیشفرض برای نگهداری Viewها و PartialViewهایی استفاده میشود که ممکن است در چندین Controller و View مختلف مورد استفاده قرار بگیرند. با این کار، میتوانید به راحتی PartialViewها را در سراسر پروژه خود به اشتراک بگذارید و دسترسی داشته باشید.
همچنین ایجاد یک پوشه مخصوص برای PartialViewها در داخل پوشه Views/Shared میتواند به سازماندهی بهتر پروژه کمک کند و دسترسی و مدیریت PartialViewها را سادهتر نماید.
نکته : اگر PartialViewها تنها در یک Controller یا View خاص استفاده میشوند، میتوانید آنها را در پوشه مرتبط با همان Controller قرار دهید. برای مثال، PartialViewهایی که فقط در HomeController استفاده میشوند را میتوانید در Views/Home قرار دهید.
در پنحره جدید تیک Create As Partial View را بزنید. در نام گذاری توجه داشته باشید که با _ شروع شود و در آخر آن عبارت Partial اضافه شود.
@Html.Partial("Partials/_UserListPartial")
@{
await Html.RenderPartialAsync("Partials/_UserListPartial");
}
تفاوتهای بین Partial و RenderPartial
در رندر کردن محتوا Partial نتیجه را به عنوان یک رشته HTML برمیگرداند و سپس آن را در صفحه اصلی درج میکند. RenderPartial مستقیماً خروجی را در جریان پاسخ مینویسد.
در عملکرد Partial ممکن است از حافظه بیشتری استفاده کند، زیرا نتیجه را به عنوان یک رشته HTML نگه میدارد. ولی RenderPartial میتواند کارایی بهتری داشته باشد، به ویژه در صورت استفاده از PartialViewهای بزرگ، زیرا خروجی را مستقیماً در جریان پاسخ مینویسد.
<partial name="Partials/_UserListPartial" />
ارسال مدل به PartialView با Tag Helper
@{
var model = new Blog { Id = 1, Url = "Url", Title = "Title", Description = "Description" };
}
<partial name="Partials/_TestPartial" model="model" />
ارسال مدل به PartialView با Html Helper توجه داشته باشید که در این روش باید آدرس دهی کامل باشد.
@{
await Html.RenderPartialAsync("~/Views/Shared/Partials/_TestPartial.cshtml", new Blog { Id = 1, Url = "Url", Title = "Title", Description = "Description" });
}
دریافت و نمایش مدل در Partial View
@model CreatePartialView.Models.Blog
<h1>My Partial View</h1>
<h4>@Model.Id</h4>
<h4>@Model.Url</h4>
<h4>@Model.Title</h4>
<h4>@Model.Description</h4>
ارسال ViewData به PartialView
@{
ViewData["Message"] = "My Message";
}
<partial name="Partials/_TestPartial" />
دریافت ViewData در PartialView
<h4>@ViewData["Message"]</h4>
اگر PartialView ای که میخواهید ایجاد کنید. دارای منطق پیچیدهای بود، باید از ViewComponentها استفاده کنید. که قابلیتهای بیشتری برای مدیریت منطق و نمایش فراهم میکنند. کلا اگر نیاز به دریافت دیتا از دیتابیس بودید به سراغ ViewComponent ها بروید.
بسیار عالی بود در پارشیال ویو های تو در تو مشکل داشتم با دیدن این فیلم مشکلم حل شد.
ممنون استاد