上個月在新版本的ASP CORE 2.0中,他們介紹了Razor Pages,這讓我在一個循環中,因爲舊的控制器&模型frpm MVC從ASP CORE 2 Razor頁面。如何重寫MVC操作和屬性到ASP核心MVVM Razor頁面
我從這個page的理解是,我們得到使用[BindProperty] attribute
外的動作/法屬性的默認綁定!!!!,這是因爲它移動到MVVM framework
,而不是MVC
框架。
- 問:在試圖改寫了傳統的行動,因爲沒有控制器,如何移動到代碼到新RazorPages MVVM框架,即哪裏以及如何將屬性綁定和行動/處理器?
- 由於屬性是而不是在簽名中,動作/處理程序如何知道從View/Razor Page傳遞給它的屬性?
什麼是PageModel?
public class CreateModel : PageModel // what is this pagemodel, is it new or the same old model?
{
private readonly AppDbContext _db;
public CreateModel(AppDbContext db)
{
_db = db;
}
[BindProperty]
public Customer Customer { get; set; } // why is the property outside?
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_db.Customers.Add(Customer);
await _db.SaveChangesAsync();
return RedirectToPage("/Index");
}
}
感謝您的答覆,我想知道你在哪裏的行動去了嗎?特別是對於表單submits/Ajax調用......一切似乎都與OnPOST處理程序綁定在一起......我是否需要構建自己的自定義路由器......看起來像是倒退了一步。想知道爲什麼我應該採取這種行動,或者應該在何時考慮這個模型 – transformer
@transformer那麼,每個服務器動作可能最好放置在每個頁面模型中。由於每個頁面都有自己的邏輯,因此不能像使用控制器那樣以簡單的方式重新使用邏輯。 我認爲你應該使用可能以前使用經典的asp窗體和/或小型項目的項目,而不需要在頁面之間共享邏輯。當然,你仍然可以創建一些服務類並使用它。但是如果你不確定爲什麼選擇razorpages,我會說經典的MVC,而不是razorpages。 – Ms01
「但是如果你想要控制器,我建議你不要使用剃鬚刀頁面」 - 你可以使用控制器和Razor Pages一起使用。我這樣做,如果我想要API風格的URI不一定與特定頁面相關。如果你真的想要,你甚至可以將MVC視圖與Razor Pages混合使用。 Razor Pages與Web Forms的唯一關係是它們都是MVVM,它們沒有任何其他Web窗體行李(比如viewstate,頁面生命週期,asp控件,單個表單限制等)。 – McGuireV10