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

本文关键字:控制器 一个 视图 加载 何使用 | 更新日期: 2023-09-27 18:20:25

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

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

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

有什么想法吗?

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

您可以使用类似的东西

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

听起来这已经回答了这个问题:如何在ASP.NET MVC中模拟Server.Transfer?

总之,你应该看看:

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

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

  • http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.redirect.aspx
  • 重定向到操作并需要传递数据
  • 重定向到其他控制器

理想情况下,您不能从Different Controller和Different Action返回视图。但您可以从相同的控制器和不同的操作返回视图。

为了回答您的问题,我们可以随时重定向到不同的控制器和不同的操作。在这种情况下,它将是一个302 GET请求。因此,如果您不能在控制器之间传递模型。

(尽管您可以作为路由值传递,这些值将附加在querystring中。(这根本不建议))

最佳方法是

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

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

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

  1. 发送到第一个控制器
  2. 将模型添加到TempData
  3. 将RedirectResult返回到第二个控制器
  4. 从TempData检索第一个模型
  5. 处理和返回合并模型

如果您不想重定向,可以考虑将第一个控制器中的操作转换为ActionFilter。该过滤器可以应用于两个控制器动作(第一和第二)。您的初始视图将直接发布到第二个控制器,ActionFilter将帮助创建模型的这一部分。