我来自Asp.Net背景,我正在为一个新项目评估Asp.Net MVC。我无法看到如何充分构建大型项目。
我对模型/视图/控制器架构感到满意,我现在正试图让区域工作(这看起来很复杂)。
你能在区域内拥有区域吗? 你能把视图放在dll中吗?
我真的需要一个起点,是否有资源显示如何构建大型MVC项目,假设最终在项目中将有100多个视图,我不希望它们都在同一个文件夹中,理想情况下我想要子文件夹
感谢您的帮助
编辑: 我可以看到每个控制器映射到一个View文件夹,我想要的是更像这样的东西
Areas Mail Absence SimpleAbsenceController.cs ComplexAbsenceController.cs Overtime SimpleOvertimeController.cs ComplexOvertimeController.cs Etc
Edit2:也许这更像是一个路由问题,我可以从以下地图进行映射: http://www.mystuff.com/SimpleAbsence/Index
到Mail / Absence / SimpleAbsenceController
从根本上说,我想要一种将项目结构化为文件夹的方法
答案 0 :(得分:7)
我讨厌回答我自己的问题,因为我觉得它破坏了其他试图提供帮助的人的工作,同时其他人可能会在以后看到这些,这些都是新手问题,所以...
(这一切都来自阅读Pro ASP.Net MVC5,好书)
我想知道Asp.Net MVC在使用子文件夹或dll方面有多大的灵活性。这个答案解决了子文件夹的问题。
答案
您可以根据磁盘上的文件夹将控制器放在哪里,这些是编译的,但是......
使用区域时,AreaRegistration.cs文件中的MapRoute会自动限制 到该区域的命名空间的路由。因此,例如,如果您将控制器移动到某个区域,您必须更改名称空间或Url.Action等方法将失败
视图必须保持原样,因此对于名为Fred的控制器,必须有这样的结构:
View - Fred - Action1 - Action2 - etc
您可以使用自己的路由系统解决所有这些问题,您可能可以通过自定义路由解决命名空间问题,但我的观点是您应该使用系统的新手,直到您足够了解完全了解违反规则的后果
所以这意味着你可以将一个包含几百个视图的大项目全部集中在一个文件夹中。它不像控制器可以在子文件夹中那么糟糕,你可以直接从它们映射到视图。
您在路由系统中也具有灵活性,因此无论磁盘上的控制器在哪里,您都可以拥有任何您喜欢的网址!
e.g。这条路线从中映射
http://www.example.com/App/DoSomething到
http://www.example.com/Home/Something,无需更改
routes.MapRoute("NewRoute", "App/Do{action}", new { controller = "Home" });
注意如果你这样做,请确保使用Html.ActionLink或Url.Action(或等效项)而不是直接链接,这些足够聪明,可以根据路由生成正确的URL。
正如我所说的那样,完成新手问题,但我确信其他人会有同样的问题,感谢MiniRagnarok提供了一个真实生活项目的例子
答案 1 :(得分:2)
我们在这里谈论的是非常基于意见的。我见过那些喜欢拥有大量控制器的人,他们将每个对象映射到一个Controller。我也看到过喜欢有大量观点的人。所以我的例子就是我们团队决定做的事情,而不一定与你在示例教程中看到的一样。
以我们所做的项目为例,其中包含200多个视图。该网站是一个拍卖和零售网站。
Controllers
AccountController.cs
AdminController.cs
AuctionController.cs
HomeController.cs
PhotoController.cs
StoreController.cs
SupportController.cs
Views
Account
DisplayTemplates
EditorTemplates
ChangePassword.cshtml
_Favorites.cshtml
Settings.cshtml
Admin
Auction
Home
Photo
Shared
Store
Support
对于我们来说,我们首先用下划线命名所有部分视图。我们还使用DisplayTemplates和EditorTemplates。所有这些确实有助于我们将事情分开。您会注意到我们的控制器按角色或功能分开。我们从来没有被我们的控制器中存在许多ActionResults这一事实困扰,因为我们的所有逻辑都在模型中。