我需要多个提交按钮来在 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发布,这不是问题。)