上个月在新版本的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