如何在ASP.NET MVC中RedirectToAction而不会丢失请求数据

使用ASP.NET MVC有可能需要 RedirectToAction 的情况(如表单提交)。

其中一种情况是当您在表单提交后遇到验证错误并需要重定向回表单,但希望网址反映表单的网址,而不是其提交的操作页面。

由于我要求表单包含最初的 POST ed数据,为了方便用户以及验证,我如何通过 RedirectToAction()传递数据?如果我使用viewData参数,我的 POST 参数将更改为 GET 参数。

0
额外 编辑
意见: 4
如果出现错误,为什么不只是返回相同的视图?如果模型有效 - 通常会调用RedirectToAction - 或者我错过了什么?
额外 作者 niico,
这是一个类似的问题(在同一主题上),但与此不同。无论如何,对这个问题感兴趣的人仍然可能会感兴趣: http://stackoverflow.com/questions/129335/how-do-you-redirec‌ ttoaction-使用,后与zwnj; -intead-的-GET
额外 作者 Chris Pietschmann,

1 答案

解决方案是使用TempData属性来存储所需的请求组件。

例如:

public ActionResult Send()
{
    TempData["form"] = Request.Form;
    return this.RedirectToAction(a => a.Form());
}

然后在你的“表格”行动中,你可以去:

public ActionResult Form()
{
    /* Declare viewData etc. */

    if (TempData["form"] != null)
    {
        /* Cast TempData["form"] to 
        System.Collections.Specialized.NameValueCollection 
        and use it */
    }

    return View("Form", viewData);
}
0
额外