我已经使用ASP.Net MVC(3)一段时间了,非常喜欢它。但有一件事让我有点烦恼,就是不得不一直在控制器/视图/模型/脚本目录之间浏览。所以我想知道是否有办法告诉MVC在不同的位置查找文件?
也许有人可以告诉我如何简单地按控制器将文件组合在一起,例如:
目录:/Membership
- MembershipController
- LogOnView
- LogOnModel
- RegisterView
- RegisterModel
祝好 Olav
我已经使用ASP.Net MVC(3)一段时间了,非常喜欢它。但有一件事让我有点烦恼,就是不得不一直在控制器/视图/模型/脚本目录之间浏览。所以我想知道是否有办法告诉MVC在不同的位置查找文件?
也许有人可以告诉我如何简单地按控制器将文件组合在一起,例如:
目录:/Membership
祝好 Olav
~/Views/MyEntityList/
MyEntityListController.cs
MyEntityListModel.cs
MyEntityList.js
MyEntityList.aspx
MyApp.Domain
唯一涉及“文件查找”的是视图,其他都只是一种约定,因此如果您想要,可以有:
目录:/Membership
- MembershipController
- LogOnView
- LogOnModel
- RegisterView
- RegisterModel
...但视图必须在~/Views/Membership
中。
~/Views
中。 - Max Toro我能想到的一种方法是编写自定义视图引擎来实现这一点。您可以将所有这些文件放在Controllers/Membership下面:
模型不会有问题,您只需更改模型的命名空间即可,唯一的问题在于视图。为此,请编写自定义视图引擎,以便您的MVC应用程序知道视图文件的物理位置,如下所示。
public class CustomViewEngine : RazorViewEngine
{
public CustomViewEngine()
{
ViewLocationFormats = new[]
{
"~/Controllers/{1}/{0}.cshtml",
};
}
}
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CustomViewEngine());
您还需要注意其他因素,如根据放置_Layout.cshtml的位置更新Layout属性。
如果使用区域,请添加AreaViewLocationFormats字符串数组。
您可以通过重写一些方法(如FileExists、CreateView、CreatePartialView)进行进一步的自定义。
注意:不要忘记将views文件夹中的web.config复制到Membership控制器中。否则应用程序无法找到所需的mvc命名空间,也无法找到类似viewbag、model等符号。