【问题标题】:Redirect to Action in another area that accepts a model [duplicate]重定向到接受模型的另一个区域中的操作 [重复]
【发布时间】:2015-10-16 12:38:41
【问题描述】:

关于重定向到另一个区域的操作有几个关于 SO 的问题,但没有一个回答我的更具体的问题。

假设我有这样的动作:

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

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

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

我尝试以多种方式包括模型和区域,但没有奏效。我需要一种方法来包含区域名称和模型。 谢谢。

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

【问题讨论】:

  • @markpsmith 这是一个类似的问题,增加了切换区域的皱纹。既然如此,为副本提供的答案在这里不起作用。
  • 你试过return RedirectToAction("ActioName", "ControllerName", new { Area = "", model = model})吗?
  • 我很困惑。这些答案并没有完全解决这个问题,它增加了“在另一个领域”,这是以前没有讨论过的。区别很重要,我相信,这可以作为一个新问题而不是重复问题。
  • 这不是标记答案的副本,它是 stackoverflow.com/questions/15499036/… 的副本 - @B2K 上面的建议对我有用 - return RedirectToAction("ActionName", "ControllerName", new { Area = "AreaName", model = model})

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


【解决方案1】:

改用 RedirectToRoute,namedRoute 提供控制器名称和操作,而不是像默认路由那样从 url 中检索。

return RedirectToRoute("namedRoute",model);

或者可能:

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

或者重定向到一个区域

return RedirectToRoute("Area_namedRoute",model);

请注意,这将触发获取请求而不是发布。这有一些限制需要注意:

  1. 浏览器对url的长度有限制,这里IE比较麻烦
  2. 不能以这种方式触发具有 [HttpPost] 属性的操作方法
  3. 在 URL 中嵌入大量数据存在安全风险。如果用户与朋友分享他们的网页会发生什么。
  4. 搜索引擎认为获取请求没有副作用,它们被认为是只读的。

话虽如此,如果您需要发布而不是获取,请参阅ASP.NET MVC: RedirectToAction with parameters to POST Action

【讨论】:

    猜你喜欢
    • 2020-08-03
    • 2015-11-19
    • 2018-04-19
    • 1970-01-01
    • 2011-01-04
    • 2013-09-02
    • 2015-06-10
    • 2014-03-07
    • 1970-01-01
    相关资源
    最近更新 更多