我有一个基本的MVC表单,可以通过 GET 操作访问,并从路径中提取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操作并正确绑定模型。问题是我丢失了仍然需要的所有 x / y / z 路由信息。 如何保留路线信息?
我尝试了几件事:
@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>
}
答案 0 :(得分:1)
您应该将这些属性放在模型中,然后为每个属性设置HiddenFor
,如下所示:
@Html.HiddenFor(m => m.x)
@Html.HiddenFor(m => m.y)
@Html.HiddenFor(m => m.z)
然后在你的post方法中(假设它是这样的),你可以在RouteValueDictionary
中将它们传递给Get
方法,如下所示:
[HttpPost]
public ActionResult Application(MyModel model) //whatever type your model is
{
//do whatever your post method does before redirect
return RedirectToAction("Application", new { x = model.x, y = model.y, z = model.z});
}
答案 1 :(得分:0)
除了mattytommo建议的ans。我建议在asp.net MVC中使用TempData
集合。这会使用会话存储保存数据,但会临时执行,并且一旦访问它就会删除数据
这是出于这些目的而特别存在的
所以你可以将数据保存在TempData中TempData["Values"] = new {X=x,Y=y,Z=z};
然后在帖子后访问TempData["Values"]