2014-04-23 73 views
5

我来自Asp.Net背景,我正在评估一个新项目的Asp.Net MVC。我看不出如何充分构建一个大型项目。Asp.Net MVC5,构建大型项目。领域?

我对模型/视图/控制器体系结构感到满意,我目前试图让区域工作(这看起来相当复杂)。

您是否可以在区域内有区域? 你可以把视图放在dll中吗?

我真的需要一个起点,是否有资源显示如何构建大型MVC项目,假设最终将有100多个视图在项目中,我不希望它们都在同一个文件夹中,并且理想情况下,我想子文件夹

感谢您的帮助

编辑: 我可以看到,每个控制器映射到一个视图文件夹,我要的是更多的东西像这样

 
Areas 
    Mail 
    Absence 
     SimpleAbsenceController.cs 
     ComplexAbsenceController.cs 
    Overtime 
     SimpleOvertimeController.cs 
     ComplexOvertimeController.cs 
    Etc 

EDIT2 :也许吧他更是一个路由问题,我可以从地图: http://www.mystuff.com/SimpleAbsence/Index

到邮件/缺勤/ SimpleAbsenceController

从根本上说我想构建我的项目到文件夹中

+0

我不知道我理解的例子。在Views文件夹中,每个控制器应该有单独的文件夹。它已经有很多子文件夹。 – MiniRagnarok

+0

您可以将区域视为具有自己的控制器,模型和视图的子文件夹,即它具有与根相同的结构。不知道为什么你会想要区域内的地区,但不知道是否有可能! – markpsmith

+0

您可以选择任何你喜欢的路线。您的路线不必像Webforms那样匹配您的项目结构(从技术上讲,Webforms现在也具有路由,所以即使它们不必再匹配)。 –

回答

7

我讨厌回答我的问题,因为我觉得它破坏了其他人谁试图帮助,同时其他人可以看看这个以后和这些真的是新手问题的工作,所以......

(这是所有从阅读临ASP.Net MVC5,好书)

我想知道在Asp.Net MVC有多少灵活性就使用子文件夹或dll。这个答案解决了子文件夹问题。

答案

  1. 你可以把在那里,无论你喜欢在磁盘上的文件夹而言,这些被编译控制器,但...

  2. 当您使用区域图路线的AreaRegistration.cs文件自动限制 到该区域命名空间的路由。因此,例如,如果您将控制器移动到某个区域 - 必须更改名称空间或方法(如Url).Action将失败

  3. 视图必须保留在它们的位置,因此对于名为Fred的控制器,必须具有以下结构:

 
View 
- Fred 
    - Action1 
    - Action2 
    - etc 

您可以解决这一切用自己的路由系统中,你也许可以解决命名空间问题与自定义路线,但我的观点是,你应该用系统,直到工作是新手你足够了解充分理解违反规则的后果

所以这意味着您可以将一个包含几百个视图的大型项目集中在一个文件夹中。它不像控制器可以在子文件夹中那样糟糕,您可以直接从它们映射到视图。

您在路由系统中也具有灵活性,因此无论控制器在磁盘上的哪个位置,您都可以拥有任何喜欢的网址!

例如从
http://www.example.com/App/DoSomething此路由映射
http://www.example.com/Home/Something没有必要

routes.MapRoute("NewRoute", "App/Do{action}", new { controller = "Home" }); 

NB的变化。如果你这样做一定要使用Html.ActionLink或Url.Action(或equivilents),而不是直接联系,这些都是足够聪明,可根据路由生成正确的URL。

正如我说的,完整的新手问题,但我相信其他人也会有同样的问题,这要归功于MiniRagnarok他现实生活中的项目

+0

我不确定你是否最终在MVC5中使用了区域。你好像只使用Views?你建议避免区域?我不想混淆自定义路由或更改默认的MVC行为,换句话说我想保持简单。谢谢。 – John

+0

我用过的地区,一旦你经历了牙齿问题,他们很容易处理。推荐的。 我确实考虑过将视图放入dll中,但尽管我已将其运用到工作中,但除非项目庞大,否则我不会沿着该路线走下去。 – tony

+0

#2(namespacing)帮我找出了从MVC4移动站点的问题,谢谢。 –

2

我们说什么的方式这里是非常意见的基础。我看到有些人更喜欢将大量控制器与每个对象映射到控制器。我也看到有人喜欢有大量的视图。所以我的例子就是我们团队决定要做的事情,不一定像你在示例教程中看到的那样。

以我们做过的项目为例,它有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这一事实而感到困扰,因为我们的所有逻辑都在模型中。

+0

请纠正我,如果我有这个错误,但假设100个网页,你可能有1个控制器每页不同的行动,你会有100个视图文件夹,每个控制器1该文件夹中的每个操作。你不能进一步分组这些文件夹? – tony

+0

@tony我们每页没有一个控制器。我们有一个角色或功能的控制器。我的示例中的每个控制器都有〜30个视图。顺便说一下,视图和页面是非常不同的东西。 – MiniRagnarok

+0

@tony为了进一步混淆事物,Photo Controller没有任何视图,只有部分视图。所以该控制器有0页。 – MiniRagnarok