2014-04-23 71 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