如何在mvc应用程序中查看所有视图

And*_*ius 5 asp.net-mvc projects-and-solutions views project asp.net-mvc-4

我添加了一个默认的MvcApplication(MVC 4)(它MvcApplication3的名称与我的解决方案的名称相匹配)宽度主页视图(关于,索引,联系人),这将是我的启动(VS解决方案资源管理器界面中的粗体)项目.然后我添加了另一个项目(MvcApplication,但这次是空的)调用MvcApplication2了解决方案.然后我添加了后一个项目作为第一个项目的参考.我还为引用的项目添加了一个名为TestController(绿线)的控制器,并为其Index(红色箭头)方法生成了一个视图.但是,当我转到链接/Test或时/Test/Index,我没有显示我期待的视图(红色箭头).然后,我添加同一文件夹TestIndex.cshtml(蓝色箭头),主要项目上,现在我看到它的内容,而不是该项目的在我的控制器位于英寸

是否有可能使应用程序在其他项目中查找视图而不是启动项?

我正在添加结构图像,以便更容易遵循.

PS:可能相关:断点Index方法中被击中的TestController.

tldr; 使用蓝色视图而不是红色视图

在此输入图像描述

And*_*ius 0

通过我和我的一个朋友的一些想法以及关于覆盖的链接RazorViewEngine,我终于得到了我想要的东西,完全按照我的预期工作:

  1. 我创建了一个ViewsBase在主项目中命名的文件夹。
  2. 我这样重写RazorViewEngine:我只更改了我需要的地方,留下了我在构造函数中找到的所有其他内容RazorViewEngine

    public class MyCustomViewEngine : RazorViewEngine { public MyCustomViewEngine() { ...

         ViewLocationFormats = new[]
         {
              "~/Views/{1}/{0}.cshtml",
              "~/Views/{1}/{0}.vbhtml",
              "~/Views/Shared/{0}.cshtml",
              "~/Views/Shared/{0}.vbhtml",
              "~/ViewsBase/{1}/{0}.cshtml",
              "~/ViewsBase/{1}/{0}.vbhtml"
         };
    
        ...
    
    Run Code Online (Sandbox Code Playgroud)

(我发现我无法正确格式化代码,这很令人不安。有人可以帮我吗?)

Global.asax主项目中我添加了:

ViewEngines.Engines.Clear();
var ourViewEngine = new 
ViewEngines.Engines.Add(ourViewEngine);

AreaRegistration.RegisterAllAreas();
...
Run Code Online (Sandbox Code Playgroud)
  1. 我添加了一个构建后事件命令:

    xcopy /s "$(ProjectDir)Views\*.*" /Y "$(SolutionDir)$(SolutionName)\ViewsBase\"

  2. 它开始按预期顺序查找视图

  3. 我向基础项目添加了一个 ViewStart 文件,以使其也呈现布局。