Asp.net mvc Asp.net MVC-我可以从其他视图文件夹加载视图吗?

Asp.net mvc Asp.net MVC-我可以从其他视图文件夹加载视图吗?,asp.net-mvc,Asp.net Mvc,在我的应用程序中,我需要从两个不同的控制器加载相同的视图,而无需将视图放置在共享视图目录中 基本上我有这个文件夹结构 控制器 EventsController.cs SearchController.cs 观点 事件 Preview.aspx 搜寻 基本上,它的图片与这里关于堆栈溢出的图片大致相同。您可以在“问题”链接下预览一系列问题,但在搜索栏中进行搜索时,也会得到一个格式相同的页面。视图和视图模型可能是相同的 由于搜索所需的视图与事件所需的视图完全相同,因此我希望重用相同的视

在我的应用程序中,我需要从两个不同的控制器加载相同的视图,而无需将视图放置在共享视图目录中

基本上我有这个文件夹结构

  • 控制器
    • EventsController.cs
    • SearchController.cs
  • 观点
    • 事件
      • Preview.aspx
    • 搜寻
基本上,它的图片与这里关于堆栈溢出的图片大致相同。您可以在“问题”链接下预览一系列问题,但在搜索栏中进行搜索时,也会得到一个格式相同的页面。视图和视图模型可能是相同的

由于搜索所需的视图与事件所需的视图完全相同,因此我希望重用相同的视图。但是,我希望避免使用此特定视图的共享目录

所以我的两部分问题是---

  • 这可能吗?如果可能,如何实现
  • 这是坏习惯吗
  • 这是可能的
  • 我不确定您是否使用强类型视图。但假设是这样,那么对我来说,事件搜索和使用相同的视图模型进行搜索有点奇怪。可能用两种不同的视图模型将它们分开,视图会更好。此外,如果指定要在控制器中加载的视图的名称,则会认为它是视图和控制器的耦合,这肯定不是一个好主意
    是的,你可以。只需返回视图(“~/Views/Events/Preview.aspx”)

    不过,基于若干理由,我建议不要这样做。最大的问题是,这对于以后试图修改代码的任何人来说都是不明显的(甚至可能是您),并且可能会导致潜在的错误


    更好的方法可能是创建“共享”视图或共享局部视图。我的首选是共享局部视图,然后在非共享视图中呈现所需的局部视图功能。

    搜索功能仅搜索事件,因此结果的格式与事件完全相同。视图模型是完全相同的,唯一“细微”的区别是搜索控制器有一个
    q
    参数(用于查询)。也许你应该将显示抽象为一个控件,然后重新使用它。如果我采用这种方法,那就是我在事件文件夹和搜索文件夹中有相同的视图,这不是一个交易破坏者,只是想保持它干燥。我不需要一个局部视图来渲染视图中的所有内容,这会很奇怪。但是你真的在渲染视图中的所有内容吗?如果没有别的,标题会有所不同吗?我还建议,如果它确实是同一个页面,为什么不使用子操作调用另一个页面呢?没错,我可以将其称为
    事件/Search
    ,并将其保存在同一个控制器中。因为是的,这一切都非常相似。标题是动态的,就像我的所有视图一样,是在ViewModel中生成的。这个答案不正确<代码>返回视图(someSpecificViewString)导致404。我非常小心地确保指定的路径和cshtml文件存在,但MVC仍然假装它不存在。@FireWingLead-答案是正确的,你显然做错了什么,但这是不可能的,因为你只是说了“somestring”,而没有给我们确切的代码。例如,您正在传递一个实际的字符串吗?还是动态?还是一个被强制转换为对象的字符串?有很多方法可以对你进行反击。