C# 设置Html.BeginForm操作

C# 设置Html.BeginForm操作,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,razor帮助程序未解析提交表单的正确操作 如何在Razor helper中设置正确的操作? 因此,我在我的PortfolioController上有以下操作: [HttpGet] [Route("profile/edit", Name = "edit-profile")] public ActionResult Edit() { ... } [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult

razor帮助程序未解析提交表单的正确操作

如何在Razor helper中设置正确的操作?
因此,我在我的
PortfolioController上有以下操作:

[HttpGet]
[Route("profile/edit", Name = "edit-profile")]
public ActionResult Edit()
{
    ...
}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit(EditPortfolioViewModel model)
{
    ...
}
但形式行动的解决方案如下:

<form action="/profile/edit" ...>

而不是

<form action="/Portfolio/Edit" ...>


我知道我可以简单地更改操作方法名称,但我希望保留它们的名称。

在一个新项目上重新创建了它,这看起来像是路由的预期行为,它将使用哪个路由推迟到get操作,以便将其发布到相同的操作名称(这很有意义,因为路由表没有HTTP方法的概念)。在post操作上添加新路由将没有帮助。

您可以使用
[ActionName(“”)
属性将操作名称更改为所需名称

[HttpGet]
[Route("profile/edit"]
[ActionName("edit-profile")]
public ActionResult Edit()
{
    ...
}
您的路线开始形式将是

@using (Html.BeginForm("edit-profile", "Portfolio", FormMethod.Post, ...)

为什么要将/profile/edit发布到/portfolio/edit?当您可以将相同的路由应用于post操作并在get/post之间保持一致性时,似乎有点不寻常actions@finman我在这段代码上的路线只是一个示例,在我的项目中是葡萄牙语的,以使url友好。但是动作方法就像默认的MVC代码一样是一个重载。一个用于查看,另一个用于接收表单。这仍然会将表单操作解析为“配置文件/编辑”
@using (Html.BeginForm("edit-profile", "Portfolio", FormMethod.Post, ...)