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类型的参数。 但是我找不到那里的发布数据。 所以我没有比较我的自定义属性属性。

在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>

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

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

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

对于较旧的浏览器,可以在这里找到一个好的polyfill。

请记住......

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

  • ASP.NET核心1.1.0具有FormActionTagHelper创建一个formaction属性。

    <form>
        <button asp-action="Login" asp-controller="Account">log in</button>
        <button asp-action="Register" asp-controller="Account">sign up</button>
    </form>
    

    这样呈现:

    <button formaction="/Account/Login">log in</button>
    <button formaction="/Account/Register">sign up</button>
    

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

    链接地址: http://www.djcxy.com/p/48131.html

    上一篇: ASP.NET MVC Core/6: Multiple submit buttons

    下一篇: How to create a dropdownlist from an enum in ASP.NET MVC?