使用ASP.NET MVC时,有些情况(例如表单提交)可能需要RedirectToAction
。
一种这样的情况是,在表单提交后遇到验证错误,并且需要重定向回表单,但希望URL反映表单的URL,而不是它提交到的操作页面。
由于我要求表单包含最初的POST
ed数据,为了方便用户以及验证目的,我如何通过RedirectToAction()
传递数据?如果我使用viewData参数,我的POST
参数将被更改为GET
参数。
发布于 2008-08-05 05:43:28
解决方案是使用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);
}
发布于 2008-08-07 05:12:32
请记住,TempData将表单集合存储在会话中。如果您不喜欢这种行为,可以实现新ITempDataProvider接口,并使用其他一些机制来存储临时数据。除非您知道(通过测量和分析)会话状态的使用正在伤害您,否则我不会这么做。
发布于 2009-04-05 09:36:54
看看MVCContrib,你可以这样做:
using MvcContrib.Filters;
[ModelStateToTempData]
public class MyController : Controller {
//
...
}
https://stackoverflow.com/questions/1936
复制相似问题