我有一个基本的 MVC 表单,可以通过GET Action 访问,其中包含从路由中提取的 3 个字符串参数。
[HttpGet]
public ActionResult Application(string x, string y, string z)
{
//create model, setup form, etc...
return View(model);
}
访问该表单的路由配置如下:
routes.MapRoute("Application",
"application/{x}/{y}/{z}",
new
{
controller = "Application",
action = "Application",
x = "",
y = "",
z = ""
});
并且表单配置如下:
Html.BeginForm("Application", "Application", FormMethod.Post)
在我单击结果表单上的提交之前,所有这些都有效。从路由的角度来看,正确的 POST Action 被调用并且模型被正确绑定。问题是我丢失了我仍然需要的所有x/y/z路线信息。如何保存路线信息?
我尝试了几件事:
- 在隐藏字段中的表单中添加了路由详细信息,这些字段正确添加到表单内容中,但在回发时不会在模型中返回
- 尝试使用Html.BeginForm的RouteValueDictionary重载,但无法弄清楚如何使其工作。我可能只需要一个正确的例子来说明如何使用它以及如何从控制器访问状态
更新:这添加了查看示例以帮助解决有关使用隐藏字段的评论
@using (Html.BeginForm("Application", "Application", FormMethod.Post, new
{
autocomplete = "on",
id = "LoanApplication",
novalidate = string.Empty,
name = "Application"
}))
{
<fieldset>
@Html.HiddenFor(m => m.x)
@Html.HiddenFor(m => m.y)
@Html.HiddenFor(m => m.z)
@Html.HiddenFor(m => m.DigiCertId)
<br />
<input id="SubmitButton" type="submit" value="@Resources.SubmitApplicationButton" title="@Resources.SubmitApplicationButtonDescription" />
</fieldset>
}