Asp.net mvc 在Razor页面路由中组合可选处理程序和参数
我有一个页面“/访问”。输出访问列表。 单击任何访问时,我需要导航到“/visions/10”,其中“10”是访问的id。 这是最简单的部分。 现在还有其他“CRUD”操作,即“创建”。我希望“/visions/create”用于创建 我现在有什么:Asp.net mvc 在Razor页面路由中组合可选处理程序和参数,asp.net-mvc,asp.net-core,razor,routing,razor-pages,Asp.net Mvc,Asp.net Core,Razor,Routing,Razor Pages,我有一个页面“/访问”。输出访问列表。 单击任何访问时,我需要导航到“/visions/10”,其中“10”是访问的id。 这是最简单的部分。 现在还有其他“CRUD”操作,即“创建”。我希望“/visions/create”用于创建 我现在有什么: “visions.cshtml”razor页面和模型 “Visit.cshtml”razor页面,我想同时将其用作“编辑”和“创建”页面 我尝试过为“Visit.cshtml”定制“page”指令,如下所示: @page "/visits/{han
@page "/visits/{handler?}/{id?}"
这就是模型:
public class VisitModel : PageModel
{
[BindProperty]
public int VisitId { get; set; }
[BindProperty]
public CrudMode CrudMode { get; set; }
public void OnGet(int id)
{
CrudMode = CrudMode.Update;
VisitId = id;
}
public void OnGetCreate()
{
CrudMode = CrudMode.Create;
}
}
我的理解是,“handler”参数是可选的,当导航到此页面而不指定它时,会调用默认的“event”(即OnGet())
但目前:
所以本质上的问题是,在这种情况下,如何正确地组合可选处理程序和可选参数?因此,至少“OnGet”是一个正确的参数。在我看来,你把事情复杂化了(礼貌地说是“做了一些奇怪的事情”)。最终,您将得到一个页面模型,它看起来像一个MVC控制器,具有太多的操作/处理程序,这是Razor Pages设计要避免的。您正在与Razor Pages进行斗争,这就是您遇到问题的原因
创建和编辑的单独页面是最好的选择,而片段对于CRUD表单的复制部分来说是理想的选择。好吧,我期待着这样的事情。也许如果Razor页面根本不支持处理程序,我就不会尝试使用它们并首先使用片段。