如何在RedirectToAction ASP.NET 视而不会丢失数据的请求
-
08-06-2019 - |
题
使用ASP.NET 视有些情况下(例如形式提交),可能需要一个 RedirectToAction
.
一种情形是当你遇到验证的错误之后的一种形式提交,需要重新定向后的形式,但会喜欢的URL,以反映该网址的形式,不行动的网页,它提交。
因为我需要的形式包含在最初 POST
ed数据,方便用户使用,以及验证的目的,我如何可以通过数据通过 RedirectToAction()
?如果我使用可视数据用参数,我的 POST
参数将会改变 GET
参数。
解决方案
该方案是利用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);
}
其他提示
请记住,TempData储存的形式,收集会议。如果你不喜欢这样的行为,你可以实现的新ITempDataProvider口和使用其他一些机制,用于储存温度的数据。我不会那么做的除非你知道一个事实(通过测量和分析),使用的会议的国家伤害你。
看看 MVCContrib, 你可以这样做:
using MvcContrib.Filters;
[ModelStateToTempData]
public class MyController : Controller {
//
...
}
还有另一种方式避免tempdata.图案我想涉及创造1行动的原始呈现和重新呈现的无效的形式。它是这样的:
var form = new FooForm();
if (request.UrlReferrer == request.Url)
{
// Fill form with previous request's data
}
if (Request.IsPost())
{
if (!form.IsValid)
{
ViewData["ValidationErrors"] = ...
} else {
// update model
model.something = foo.something;
// handoff to post update action
return RedirectToAction("ModelUpdated", ... etc);
}
}
// By default render 1 view until form is a valid post
ViewData["Form"] = form;
return View();
这就是模式或多或少。一个小pseudoy.这个你可以创造1景来处理呈现的形式,重新显示的价值(因为形式将是充满了以前的数值),并表示错误信息。
当公布,这一行动,如果其它有效控制转移到另一个行动。
我试图让这种模式简单的 .净验证框架 作为我们建立了支持视.
如果你想通过的数据的重新定向行动的方法,该方法可以使用是:
return RedirectToAction("ModelUpdated", new {id = 1});
// The definition of the action method like public ActionResult ModelUpdated(int id);
不隶属于 StackOverflow