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

时间:2014-04-08 10:38:05

标签: asp.net-mvc asp.net-mvc-4 views project projects-and-solutions

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

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

我正在添加结构图像,以便更容易理解。

P.S。:可能相关:断点 IS Index的{​​{1}}方法中被点击。

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

enter image description here

3 个答案:

答案 0 :(得分:0)

我认为您的问题是您已将MvcApplication3设置为启动项目并导致您打开该项目的视图。

  

是否可以让应用程序在另一个中查找视图   项目而不是创业公司?

是的,它可以将您的应用程序重定向到网址。认为您的应用程序有一个URL http://localhost:(someport),您可以设置重定向到第二个应用程序的端口。

我提供了一个链接,以便更好地理解MVC的路由系统:Documentation of routing system

答案 1 :(得分:0)

据我所知,你不能像这样链接到项目。每个项目都有自己的网站和自己的地址。您可以将多个项目放在一个解决方案中的原因是分享类,服务等内容。我认为您需要的是以下几个方面:

http://www.codeproject.com/Articles/714356/Areas-in-ASP-NET-MVC

答案 2 :(得分:0)

我和我的一个朋友以及link提出了一些关于覆盖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"
         };
    
        ...
    
  3. (我觉得我觉得我无法正确格式化代码令人不安。有人可以帮我一把吗?)

    并在我添加的主要项目的Global.asax中:

    ViewEngines.Engines.Clear();
    var ourViewEngine = new 
    ViewEngines.Engines.Add(ourViewEngine);
    
    AreaRegistration.RegisterAllAreas();
    ...
    
    1. 我添加了一个构建后事件命令:

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

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

    3. 我将一个ViewStart文件添加到基础项目中,以使其也渲染布局。