在另一个接受模型的区域中重定向到操作

时间:2015-10-16 12:38:42

标签: asp.net-mvc model-view-controller area redirecttoaction

关于重定向到另一个区域的某个动作,有一些关于SO的问题,但没有一个回答我所提出的更具体的问题。

让我们说我有这样的行动:

 public virtual ActionResult ActioName(ViewModel model)
 {
    return View(model);
 }

如果不是模型参数,您可以执行以下操作从另一个区域重定向到此操作:

return RedirectToAction("ActioName", "ControllerName", new { Area = "" });

我试图以多种方式包括模型和区域但是没有用。我需要一种方法来包括区域名称和模型。 谢谢。

编辑:TempData不是答案,我不想修改目标控制器。

1 个答案:

答案 0 :(得分:0)

使用RedirectToRoute,其中namedRoute提供控制器名称和操作,而不是从URL中检索,就像默认路由一样。

return RedirectToRoute("namedRoute",model);

或者可能:

return RedirectToRoute("namedRoute",new { model: model });

或重定向到某个区域

return RedirectToRoute("Area_namedRoute",model);

请注意,这会触发get请求而不是帖子。这有一些限制需要注意:

  1. 浏览器对网址的长度有限制,IE在这里比较麻烦
  2. 具有[HttpPost]属性的操作方法无法以这种方式触发
  3. 在网址中嵌入大量数据存在安全风险。如果用户与朋友分享他们的网页会发生什么。
  4. 搜索引擎认为获取请求没有副作用,它们被视为只读。
  5. 话虽如此,如果您需要发帖而不是获取,请参阅ASP.NET MVC: RedirectToAction with parameters to POST Action