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

Asp.net mvc 重定向到接受模型的另一个区域中的操作,asp.net-mvc,model-view-controller,area,redirecttoaction,Asp.net Mvc,Model View Controller,Area,Redirecttoaction,关于重定向到另一个领域的行动,这里有几个问题,但没有一个能回答我提出的更具体的问题 假设我有这样一个动作: public virtual ActionResult ActioName(ViewModel model) { return View(model); } 如果没有模型参数,您可以执行以下操作从另一个区域重定向到此操作: return RedirectToAction("ActioName", "ControllerName", new { Area = "" });

关于重定向到另一个领域的行动,这里有几个问题,但没有一个能回答我提出的更具体的问题

假设我有这样一个动作:

 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);
请注意,这将触发get请求而不是post。这有一些限制需要注意:

  • 浏览器对url的长度有限制(此处比较麻烦)
  • 具有[HttpPost]属性的操作方法不能以这种方式触发
  • 在url中嵌入大量数据存在安全风险。如果用户与朋友共享其网页,会发生什么情况
  • Get请求被搜索引擎认为没有副作用,它们被认为是只读的

  • 话虽如此,请查看是否需要post而不是get。

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

    return RedirectToRoute("namedRoute",model);
    
    或者可能:

    return RedirectToRoute("namedRoute",new { model: model });
    
    或者重定向到某个区域

    return RedirectToRoute("Area_namedRoute",model);
    
    请注意,这将触发get请求而不是post。这有一些限制需要注意:

  • 浏览器对url的长度有限制(此处比较麻烦)
  • 具有[HttpPost]属性的操作方法不能以这种方式触发
  • 在url中嵌入大量数据存在安全风险。如果用户与朋友共享其网页,会发生什么情况
  • Get请求被搜索引擎认为没有副作用,它们被认为是只读的

  • 也就是说,看看你是否需要发布而不是获取。

    @markpsmith这是一个类似的问题,增加了切换区域的褶皱。在这种情况下,为副本提供的答案在这里不起作用。您是否尝试过
    返回重定向到操作(“ActionName”,“ControllerName”,new{Area=”“,model=model})
    ?我很困惑。这些答案并没有完全解决这个问题,这个问题增加了“在另一个领域”,这是以前没有讨论过的。区别很重要,我相信,这是一个新的问题,而不是重复的问题。这不是标记答案的重复,而是-上面@B2K建议对我有用的内容的重复-
    返回重定向到操作(“ActionName”,“ControllerName”,new{Area=“AreaName”,model=model})
    @markpsmith这是一个类似的问题,在切换区域增加了皱纹。在这种情况下,为副本提供的答案在这里不起作用。您是否尝试过
    返回重定向到操作(“ActionName”,“ControllerName”,new{Area=”“,model=model})
    ?我很困惑。这些答案并没有完全解决这个问题,这个问题增加了“在另一个领域”,这是以前没有讨论过的。区别很重要,我相信,这是一个新问题,而不是重复的问题。这不是重复的标记答案,而是重复的-上面@B2K建议的对我有用的-
    返回重定向到操作(“ActionName”,“ControllerName”,new{Area=“AreaName”,model=model})