如何使用不同的控制器从一个控制器加载视图?

时间:2012-01-17 04:12:38

标签: c# asp.net-mvc razor

非常简单的问题:我希望能够在Razor MVC中从一个页面重定向到另一个页面。

用户单击第一页上的链接,该链接在第一个控制器上调用方法。此方法使用来自其自身模型的数据以及来自第二个控制器的方法来构建第二个控制器的模型。

我现在希望使用新构建的模型显示第二个视图。但是,似乎没有办法使用View()来执行此操作(除非我是盲目的)。这两个控制器位于不同的文件夹中,因此无法自动找到要加载的页面。

有什么想法吗?

4 个答案:

答案 0 :(得分:0)

您可以使用类似

的内容
return View("../FolderName/ViewName", model);

答案 1 :(得分:0)

听起来像这回答了这个问题:How to simulate Server.Transfer in ASP.NET MVC?

总之,你应该看看:

return RedirectToRoute(new { controller = "home"});

或查看其他一些重定向选项:

答案 2 :(得分:0)

理想情况下,您无法从不同的控制器和不同的操作返回视图。但是您可以从同一控制器和不同的操作返回视图。

要回答您的问题,我们始终可以重定向到不同的控制器和不同的操作。在这种情况下,它将是 302 GET请求。如果您无法跨控制器传递模型,那么。

(虽然您可以传递路由值,这些值将附加在查询字符串中。(这根本不建议))

最佳方法是,

1)将两个动作保持在同一个控制器中。

2)在第二个控制器的动作中创建模型。

答案 3 :(得分:0)

如果页面应该重定向到第二个控制器的正确URL,我会:

  1. 发送给第一个控制器。
  2. 将模型添加到TempData。
  3. 将RedirectResult返回给第二个控制器。
  4. 从TempData中检索第一个模型。
  5. 处理并返回合并模型。
  6. 如果您不想重定向,可以考虑将操作从第一个控制器转换为ActionFilter。该过滤器可以应用于两个控制器动作(第一个和第二个)。您的初始视图将直接发布到第二个控制器,ActionFilter将帮助创建模型的该部分。