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

Redirect to Action in another area that accepts a model

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

假设我有这样一个操作:

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

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

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

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

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

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

return RedirectToRoute("namedRoute",model);

或者可能:

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

或重定向到某个区域

return RedirectToRoute("Area_namedRoute",model);

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

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

也就是说,如果您需要 post 而不是 get,请参阅 ASP.NET MVC: RedirectToAction with parameters to POST Action