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

我在这里看到了一个优雅的解决方案:How do you handle multiple submit buttons in ASP.NET MVC Framework?
使用此解决方案,可以用自定义属性修饰 Action 方法。处理路由后,此自定义属性的方法将检查该属性的属性是否与单击的“提交”按钮的名称匹配。

但是在MVC Core(RC2每晚构建)中,我没有找到ActionNameSelectorAttribute(我也搜索了Github存储库)。我找到了使用ActionMethodSelectorAttribute(http://www.dotnetcurry.com/aspnet-mvc/724/handle-multiple-submit-buttons-aspnet-mvc-action-methods)的类似解决方案。
ActionMethodSelectorAttribute可用,但是IsValidForRequest方法具有不同的签名。有一个类型为RouteContext的参数。但是我在那里找不到发布数据。因此,我没有什么可与我的自定义属性属性进行比较。

MVC Core中是否有类似以前的MVC版本中可用的优雅解决方案?

最佳答案

您可以为此使用HTML5 formaction属性,而不是将其路由到服务器端。

<form action="" method="post">
    <input type="submit" value="Option 1" formaction="DoWorkOne" />
    <input type="submit" value="Option 2" formaction="DoWorkTwo"/>
</form>

然后只需执行以下 Controller 操作:

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

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

对于较旧的浏览器,一个很好的polyfill可以是found here

请记住...
  • 当用户按下回车键时,将始终选择第一个提交按钮。
  • 如果发布的操作也发生了ModelState或其他错误,则需要将用户送回正确的 View 。 (但是,如果通过AJAX发布,这不是问题。)
  • 10-07 19:31
    查看更多