ASP.NET MVC - 带有URL附加参数的POST操作方法

Kar*_*arl 10 c# asp.net-mvc modelbinders actionmethod

使用ASP.net MVC是否可以将表单POST到控制器操作,该操作包括不在表单中的参数,但是来自URL?

例如

GroupController中的Action方法:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(int idOne, int idTwo, Model model)
    { ... }
Run Code Online (Sandbox Code Playgroud)

路线:

"{controller}/{action}/{idOne}/{idTwo}"
Run Code Online (Sandbox Code Playgroud)

发布网址:

/Employee/Show/1/42
Run Code Online (Sandbox Code Playgroud)

在此示例中,表单将发布到不同的控制器,模型具有正确的值,但其他参数的默认值为0.

我期望的行为是ModelBinder会看到我有两个匹配给定路由的参数,并以与GET操作相同的方式将当前值1和42分配给参数.

这种行为不受支持,或者我错过了什么?

编辑:要清楚,Show控制器视图上的Employee表单包含一个发布到不同控制器的表单.我们可以称之为Group.

表单操作URL如下所示

/Groups/Create/0/0
Run Code Online (Sandbox Code Playgroud)

表格声明如下

Html.BeginForm("Create", "Groups")
Run Code Online (Sandbox Code Playgroud)

尝试了许多不同的重载后,Html.BeginForm我发现仅当表单操作URL与浏览器地址栏中的当前URL匹配时才会映射参数.

因此,如果我导航到URL,/Groups/Create/1/42我将有一个新表格.如果我然后提交表单,则URL路由值将传递给POST操作.

Jør*_*ode 8

如果我正确理解您的问题,您希望action渲染<form>元素指向包含路由值的URL.这应该可以使用HtmlHelper.BeginForm()扩展方法的一个重载:

Html.BeginForm("action","controller", new { idOne=1, idTwo=2 }, FormMethod.Post);
Run Code Online (Sandbox Code Playgroud)

如果我的问题完全错误,请告诉我:)