如何在ASP.NET MVC项目中实现我自己的文件夹结构(体系结构)?

时间:2014-07-17 12:56:13

标签: asp.net-mvc asp.net-mvc-4

众所周知,当我们创建一个MVC应用程序时,它会创建自己的典型结构,称为约定优于配置,这是一个很好的实践。 它分别配置视图,控制器和模型。

我担心的是,我能否设计(设计)它:

enter image description here

如果我这样做,我的viewengine将在视图内搜索不在子文件夹内的视图,并且有很多东西,例如路由将被更改......等等..

实际上我不想以典型的方式构建我的视图,控制器或模型,我想根据我的域单独放置我的视图,而不是像MVC那样控制器。    但是在控制器的情况下我们可以使用任何文件夹结构。我特别关注模型,视图和路由也不应受到影响。

所有这些都是关于“我自己配置​​的约定”。

有人可以解释,如何完成它或任何其他选择。

感谢名单  阿努邦。

3 个答案:

答案 0 :(得分:3)

听起来你正在寻找的是'地区'。这允许您分离您的控制器和观看单独的区域'文件夹。

此处可以找到更多信息,因为在此答案中包含必要的信息可能不实用:

http://msdn.microsoft.com/en-GB/library/ee671793(v=vs.100).aspx

答案 1 :(得分:2)

控制器和模型的位置和文件夹结构并不重要,应该以任何方式工作。控制器按其类型和类名定位。

默认情况下,viewengine会搜索子文件夹,尝试与控制器的命名匹配。它搜索多个位置。

现在,如果要更改视图引擎搜索文件的方式,可以在global.asax中对其进行配置。例如,Have a look here关于RazorViewEngine。

就个人而言,我已经远离了视图引擎自动查找我的视图,而是使用所有这些视图的相对路径,因为我认为它使整体更具可读性。

以下是配置的视图引擎和相对路径的示例。

的global.asax

ViewEngines.Engines.Clear();
var razorEngine = new RazorViewEngine() { FileExtensions = new string[] { "cshtml" } };
ViewEngines.Engines.Add(razorEngine);

控制器动作

return View("~/Views/Home/Index.cshtml", model);

希望我能正确理解你的问题。

答案 2 :(得分:0)

到目前为止,我已达成结论。

我们必须考虑的事情是:

1.需要覆盖ControllerFactory:我们必须在特定位置或程序集引用中搜索控制器。(默认控制器工厂只需查询控制器名称)

2.需要覆盖ViewEngine:我们必须根据需要更改视图搜索位置。

3. Route中的小修改:我们必须在路径中指定模块名称以进行正确的重定向。 路线将是这样的:

 routes.MapRoute(
                name: "Default",
                url: "{module}/{controller}/{action}/{id}",
                defaults: new { module = "HR", controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

很快就会实施。非常欢迎您的建议。