众所周知,当我们创建一个MVC应用程序时,它会创建自己的典型结构,称为约定优于配置,这是一个很好的实践。 它分别配置视图,控制器和模型。
我担心的是,我能否设计(设计)它:
如果我这样做,我的viewengine将在视图内搜索不在子文件夹内的视图,并且有很多东西,例如路由将被更改......等等..
实际上我不想以典型的方式构建我的视图,控制器或模型,我想根据我的域单独放置我的视图,而不是像MVC那样控制器。 但是在控制器的情况下我们可以使用任何文件夹结构。我特别关注模型,视图和路由也不应受到影响。
所有这些都是关于“我自己配置的约定”。
有人可以解释,如何完成它或任何其他选择。
感谢名单 阿努邦。
答案 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 }
);
很快就会实施。非常欢迎您的建议。