使用ASP.NET 视有些情况下(例如形式提交),可能需要一个 RedirectToAction.

一种情形是当你遇到验证的错误之后的一种形式提交,需要重新定向后的形式,但会喜欢的URL,以反映该网址的形式,不行动的网页,它提交。

因为我需要的形式包含在最初 POSTed数据,方便用户使用,以及验证的目的,我如何可以通过数据通过 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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top