POST 不会重定向到另一个操作
POST won't redirect to anoter action
我有这个将呈现表单的动作,我还有 post 动作来接收数据并将其保存到会话,然后将其重定向到另一个页面。我的问题是它没有重定向,唯一发生的事情是我停留在同一页面并且我的 url 被更改了。
这是我的代码:
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
我认为您的 ModelState.IsValid
属性 返回了 false,因此它返回了相同的视图。
在您的代码中放置一个断点,看看为什么您的 IsValid
属性 是错误的。可能是您没有从表单中提供视图模型的所有必需 属性 值。
您没有默认路由,因此助手无法生成正确的 URL。如果您不想使用默认路由,请为要重定向的操作创建另一个路由并使用 RedirectToRoute 方法。
对我来说现在回复已经太晚了但是...
如果您通过 ajax 调用访问 POST 方法 (ActionResult),就会发生这种情况。
Ajax 方法是为部分更新而设计的,它不适用于全面提交方法,除非您有其他可用的方式离开页面。
我有这个将呈现表单的动作,我还有 post 动作来接收数据并将其保存到会话,然后将其重定向到另一个页面。我的问题是它没有重定向,唯一发生的事情是我停留在同一页面并且我的 url 被更改了。
这是我的代码:
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
我认为您的 ModelState.IsValid
属性 返回了 false,因此它返回了相同的视图。
在您的代码中放置一个断点,看看为什么您的 IsValid
属性 是错误的。可能是您没有从表单中提供视图模型的所有必需 属性 值。
您没有默认路由,因此助手无法生成正确的 URL。如果您不想使用默认路由,请为要重定向的操作创建另一个路由并使用 RedirectToRoute 方法。
对我来说现在回复已经太晚了但是... 如果您通过 ajax 调用访问 POST 方法 (ActionResult),就会发生这种情况。 Ajax 方法是为部分更新而设计的,它不适用于全面提交方法,除非您有其他可用的方式离开页面。