重定向到另一个接受模型的区域中的操作
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。这有一些限制需要注意:
- 浏览器对a的长度有限制url,这里IE比较麻烦
- 无法以这种方式触发具有 [HttpPost] 属性的操作方法
- 在 url 中嵌入大量数据存在安全风险。如果用户与朋友分享他们的网页会发生什么。
- 搜索引擎认为 Get 请求没有副作用,它们被认为是只读的。
也就是说,如果您需要 post 而不是 get,请参阅 ASP.NET MVC: RedirectToAction with parameters to POST Action。
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。这有一些限制需要注意:
- 浏览器对a的长度有限制url,这里IE比较麻烦
- 无法以这种方式触发具有 [HttpPost] 属性的操作方法
- 在 url 中嵌入大量数据存在安全风险。如果用户与朋友分享他们的网页会发生什么。
- 搜索引擎认为 Get 请求没有副作用,它们被认为是只读的。
也就是说,如果您需要 post 而不是 get,请参阅 ASP.NET MVC: RedirectToAction with parameters to POST Action。