ASP.NET MVC Core / 6:多个提交按钮

我需要多个提交按钮来在控制器中执行不同的操作。

我在这里看到了一个优雅的解决方案: 如何在ASP.NET MVC框架中处理多个提交按钮? 使用此解决方案,可以使用自定义属性修饰操作方法。 处理路径时,此自定义属性的方法检查属性的属性是否与单击的提交按钮的名称匹配。

但是在MVC Core(RC2每晚构建)中我还没有找到ActionNameSelectorAttribute (我还搜索了Github存储库)。 我找到了一个类似的解决方案,它使用ActionMethodSelectorAttribute ( http://www.dotnetcurry.com/aspnet-mvc/724/handle-multiple-submit-buttons-aspnet-mvc-action-methods )。

ActionMethodSelectorAttribute可用,但方法IsValidForRequest具有不同的签名。 有一个类型为RouteContext的参数。 但我找不到那里的post数据。 所以我没有什么可以与我的自定义属性属性进行比较。

MVC Core中是否有与之前的MVC版本类似的优雅解决方案?

您可以使用HTML5 formaction属性,而不是在服务器端路由它。

 

然后只需要像这样的控制器动作:

 [HttpPost] public IActionResult DoWorkOne(TheModel model) { ... } [HttpPost] public IActionResult DoWorkTwo(TheModel model) { ... } 

可以在此处找到适用于旧版浏览器的优质填充。

请记住……

  1. 当用户按下回车符时,将始终选择第一个提交按钮。
  2. 如果在发布的操作上发生错误 – ModelState或其他 – ,则需要将用户发送回正确的视图。 (但是,如果您通过AJAX发布,这不是问题。)

ASP.NET Core 1.1.0具有FormActionTagHelper ,用于创建formaction属性。

 

这样渲染:

   

它也适用于type="image"type="submit" input标签。