2011-02-05 68 views
3

我一直在使用ASP.Net MVC(3)一段时间了,我非常喜欢它。但有一件事我觉得有点讨厌,就是不得不一直在controllers/views/model/script目录之间浏览。所以我想知道是否有办法告诉MVC在不同位置查找文件?更改ASP.Net MVC目录结构

也许有人可以告诉我如何简单地组文件一起由控制器,如:

目录:/会员

  • MembershipController
  • LogOnView
  • LogOnModel
  • RegisterView
  • RegisterModel

亲切的问候奥拉夫

+0

我认为您对MVC领域感兴趣:http://msdn.microsoft.com/en-us/library/ ee671793.aspx –

+0

@Kirk我认为即使在使用MVC区域之后,您仍然需要浏览每个区域中的控制器/视图/模型。 –

+1

安装Resharper。要转到控制器或视图等(使用Idea键绑定),只需按Ctrl-N并开始输入名称,然后从列表中选择。您的工具让生活更轻松。不幸的是,它不适用于脚本: -/ – Sean

回答

1

我想你需要获得通过电动工具更新解决方案导航器扩展VS 2010

这样一来,就可以在解决方案导航显示,而不是解决方案资源管理器,只有打开的文件,例如。使它更容易。

顺便说一句,删除所有的模型文件夹,并创建一个单独的样板工程,如:

MyApp.Domain 

的任何解决方案,它超出了基本都会从中受益。

正如您对问题的评论所述,地区也将减少您的导航要求。

2

我确切地知道你在说什么。下面是在那里我找到了默认MVC文件夹结构是繁重的条件:

  • 我使用的一个模型,即看的方式
  • 我控制器基本上只与一个特定视图
  • 我的作品有一些只适用于该视图的JavaScript

为什么我要将每个这些作品放在不同的文件夹中?

我创建的视图文件夹视图中的文件夹,让你有一个文件夹〜/查看/ MyEntityList(就像传统的MVC方式),但我把一切,涉及到该组件有:

~/Views/MyEntityList/ 
     MyEntityListController.cs 
     MyEntityListModel.cs 
     MyEntityList.js 
     MyEntityList.aspx 

我觉得这个结构会让所有的开发人员保持视图相互分离。除了允许浏览器直接访问.js资源之外,不需要任何特殊的MVC配置。

有一些架构模式,这可能不是一个好方法。对于模型 - 观看模式(更多描述请参见Los Techies),我非常喜欢这种结构。

1

唯一的“寻找文件”事情是有意见,一切只是一个约定。因此,如果你愿意,你可以有:

目录:/会员

  • MembershipController
  • LogOnView
  • LogOnModel
  • RegisterView
  • 个RegisterModel

...但意见必须在~/Views/Membership

+0

不,视图可以在任何地方。你只是没有找到你正常寻找的好路径。您可以指定您喜欢的任何路径到您的视图的任何位置。 –

+0

@Mystere Man:是的,你可以使用绝对路径。我在谈论框架如何定位东西,所以除非你使用绝对路径,否则视图必须在'〜/ Views'中。 –

0

看起来你需要覆盖的视图引擎的一些行为。你可以See this question得到一个更好的主意。

0

我可以想到的一种方法是实现这一点,就是编写自定义视图引擎。你可以把所有这些低于控制器/会员

  • MembershipController
  • LogOnView
  • LogOnModel
  • RegisterView
  • RegisterModel

模式将不会是一个问题,你可以简单地改变文件模型的命名空间,唯一的问题是视图。为此,编写自定义视图引擎,以便您的mvc应用程序知道视图文件的物理位置,如下所示。

public class CustomViewEngine : RazorViewEngine 
{ 
    public CustomViewEngine() 
    { 
     ViewLocationFormats = new[] 
     { 
      "~/Controllers/{1}/{0}.cshtml", 

     }; 
    } 
} 

在通过的global.asax.cs包括下面的代码

ViewEngines.Engines.Clear(); 
ViewEngines.Engines.Add(new CustomViewEngine()); 

您可能还需要照顾其他各种因素,如更新取决于布局属性加在的Application_Start()的视图引擎放置_Layout.cshtml的位置。

如果您正在使用区域,请同时添加AreaViewLocationFormats字符串数组。

您可以通过覆盖FileExists,CreateView,CreatePartialView等方法进行进一步的自定义。

注意:不要忘记将views文件夹中的web.config复制到Membership控制器。否则,应用程序找不到所需的mvc命名空间,并且找不到像viewbag,model等符号。