POST不会重定向到另一个操作

时间:2015-01-05 19:31:45

标签: c# asp.net-mvc-3 http-post http-redirect

我有这个动作将呈现一个表单,我还有post动作来接收数据e将它保存到会话然后将其重定向到另一个页面。我的问题是它没有重定向,唯一发生的事情是我停留在同一页面并且我的网址被更改。

这是我的代码:

public ViewResult Index()
{
    return View(model);
}

[HttpPost]
public ActionResult Index(Cadastro model)
{
    if (!ModelState.IsValid)
    {
        ModelState.AddModelError("", "Ocorreu um erro ao tentar realizar o cadastro, tente novamente.");
        return View();
    }

    Session["TVCNome"]    = model.Nome;
    Session["TVCEmail"]   = model.Email;
    Session["TVCFone"]    = model.Telefone;
    Session["TVCUnidade"] = model.Unidade;
    Session["TVCadastro"] = true;

    return RedirectToAction("Index", "Apresentacao");
}

我还尝试重定向到同一个控制器中的一个动作,然后再转到另一个控制器,但它也没有工作:

[HttpPost]
public ActionResult Index(Cadastro model)
{
    //Processing

    return RedirectToAction("Redirect");
}

public ActionResult Redirect()
{
    return RedirectToActionPermanent("Index", "Apresentacao");
}

我做错了什么?

编辑:

这是Cadastro控制器,我试图重定向到Apresentacao

编辑2:

我的路线配置:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.LowercaseUrls = true;
routes.RouteExistingFiles = false;

routes.MapRoute(
    "SalvaResultado",
    "SalvaResultado",
    new { controller = "Helper", action = "SalvaResultado" }
);

routes.MapRoute(
    "BuscaCidades",
    "BuscaCidades",
    new { controller = "Helper", action = "BuscaCidades" }
);

routes.MapRoute(
    "BuscaUnidades",
    "BuscaUnidades",
    new { controller = "Helper", action = "BuscaUnidades" }
);

routes.MapRoute(
    "Default",
    "{*RedirectUrl}"
).RouteHandler = new RouteHandler();

这是我的RouteHandler代码,我使用外部来源,所以它不会太大:http://pastebin.com/WXy7LYN9

3 个答案:

答案 0 :(得分:1)

我认为你的ModelState.IsValid属性返回false,因此返回相同的视图。

在代码中添加一个断点,看看为什么IsValid属性为false。可能是您没有从表单中提供视图模型的所有必需属性值。

答案 1 :(得分:1)

您没有默认路线,因此帮助者无法生成正确的网址。如果您不想使用默认路由,请为要重定向的操作创建另一个路由,并使用RedirectToRoute方法。

答案 2 :(得分:0)

接缝对我来说已经太迟了,但是... 如果通过ajax调用进入POST方法(ActionResult),则会发生这种情况。 Ajax方法用于设计上的部分更新,除非您有其他可用的离开页面的方法,否则它不适用于全面提交方法。