Razor Pages چیست؟
مدل صفحهمحور ASP.NET Core که هر صفحه یک فایل `.cshtml` بههمراه کلاس `PageModel` مستقل خودش دارد — جایگزین سادهتر MVC برای سناریوهای صفحهمحور.
چرا مهم است؟
برای اپلیکیشنهایی که ساختارشان بیشتر صفحهمحور است (نه API/منابع محور)، Razor Pages کد را نزدیکتر به همان صفحهای که به آن مربوط است نگه میدارد و نیاز به یک Controller جدا برای هر گروه صفحه را حذف میکند.
تعریف
هر Razor Page از دو فایل تشکیل شده: Index.cshtml (View) و Index.cshtml.cs (کلاس PageModel با متدهای OnGet/OnPost) — بدون نیاز به Controller جداگانه.
مثال
public class IndexModel : PageModel
{
private readonly IProductService _service;
public IndexModel(IProductService service) => _service = service;
public List<Product> Products { get; set; } = [];
public async Task OnGetAsync() => Products = await _service.GetAllAsync();
}
@page
@model IndexModel
<ul>
@foreach (var p in Model.Products) { <li>@p.Name</li> }
</ul>
Razor Pages در برابر MVC
- Razor Pages: هر صفحه خودکفا، مناسب فرمها و صفحات ساده CRUD.
- MVC: یک Controller چند Action را مدیریت میکند، مناسب زمانی که منطق مشترک زیادی بین چند صفحه/Action هست.
اشتباه رایج
❌ تکرار منطق مشترک (مثل اعتبارسنجی یا واکشی داده مشابه) در چند PageModel جدا بهجای استخراج آن به یک Service مشترک — مزیت خودکفایی Razor Pages نباید به قیمت تکرار کد باشد.
منبع و مطالعه بیشتر
خلاصه
Razor Pages هر صفحه را با View و PageModel خودش خودکفا میکند، مناسب فرمها و CRUD ساده. منطق مشترک بین صفحات را در Service جدا نگه دارید تا تکرار نشود. مرجع کامل: مستندات Razor Pages، Microsoft Learn.
