2011-02-05 102 views
3

我一直在使用ASP.Net MVC(3)一段時間了,我非常喜歡它。但有一件事我覺得有點討厭,就是不得不一直在controllers/views/model/script目錄之間瀏覽。所以我想知道是否有辦法告訴MVC在不同位置查找文件?更改ASP.Net MVC目錄結構

也許有人可以告訴我如何簡單地組文件一起由控制器,如:

目錄:/會員

  • MembershipController
  • LogOnView
  • LogOnModel
  • RegisterView
  • RegisterModel

親切的問候奧拉夫

+0

我認爲您對MVC領域感興趣:http://msdn.microsoft.com/en-us/library/ ee671793.aspx –

+0

@Kirk我認爲即使在使用MVC區域之後,您仍然需要瀏覽每個區域中的控制器/視圖/模型。 –

+1

安裝Resharper。要轉到控制器或視圖等(使用Idea鍵綁定),只需按Ctrl-N並開始輸入名稱,然後從列表中選擇。您的工具讓生活更輕鬆。不幸的是,它不適用於腳本: -/ – Sean

回答

1

我想你需要獲得通過電動工具更新解決方案導航器擴展VS 2010

這樣一來,就可以在解決方案導航顯示,而不是解決方案資源管理器,只有打開的文件,例如。使它更容易。

順便說一句,刪除所有的模型文件夾,並創建一個單獨的樣板工程,如:

MyApp.Domain 

的任何解決方案,它超出了基本都會從中受益。

正如您對問題的評論所述,地區也將減少您的導航要求。

2

我確切地知道你在說什麼。下面是在那裏我找到了默認MVC文件夾結構是繁重的條件:

  • 我使用的一個模型,即看的方式
  • 我控制器基本上只與一個特定視圖
  • 我的作品有一些只適用於該視圖的JavaScript

爲什麼我要將每個這些作品放在不同的文件夾中?

我創建的視圖文件夾視圖中的文件夾,讓你有一個文件夾〜/查看/ MyEntityList(就像傳統的MVC方式),但我把一切,涉及到該組件有:

~/Views/MyEntityList/ 
     MyEntityListController.cs 
     MyEntityListModel.cs 
     MyEntityList.js 
     MyEntityList.aspx 

我覺得這個結構會讓所有的開發人員保持視圖相互分離。除了允許瀏覽器直接訪問.js資源之外,不需要任何特殊的MVC配置。

有一些架構模式,這可能不是一個好方法。對於模型 - 觀看模式(更多描述請參見Los Techies),我非常喜歡這種結構。

1

唯一的「尋找文件」事情是有意見,一切只是一個約定。因此,如果你願意,你可以有:

目錄:/會員

  • MembershipController
  • LogOnView
  • LogOnModel
  • RegisterView
  • 個RegisterModel

...但意見必須在~/Views/Membership

+0

不,視圖可以在任何地方。你只是沒有找到你正常尋找的好路徑。您可以指定您喜歡的任何路徑到您的視圖的任何位置。 –

+0

@Mystere Man:是的,你可以使用絕對路徑。我在談論框架如何定位東西,所以除非你使用絕對路徑,否則視圖必須在'〜/ Views'中。 –

0

看起來你需要覆蓋的視圖引擎的一些行爲。你可以See this question得到一個更好的主意。

0

我可以想到的一種方法是實現這一點,就是編寫自定義視圖引擎。你可以把所有這些低於控制器/會員

  • MembershipController
  • LogOnView
  • LogOnModel
  • RegisterView
  • RegisterModel

模式將不會是一個問題,你可以簡單地改變文件模型的命名空間,唯一的問題是視圖。爲此,編寫自定義視圖引擎,以便您的mvc應用程序知道視圖文件的物理位置,如下所示。

public class CustomViewEngine : RazorViewEngine 
{ 
    public CustomViewEngine() 
    { 
     ViewLocationFormats = new[] 
     { 
      "~/Controllers/{1}/{0}.cshtml", 

     }; 
    } 
} 

在通過的global.asax.cs包括下面的代碼

ViewEngines.Engines.Clear(); 
ViewEngines.Engines.Add(new CustomViewEngine()); 

您可能還需要照顧其他各種因素,如更新取決於佈局屬性加在的Application_Start()的視圖引擎放置_Layout.cshtml的位置。

如果您正在使用區域,請同時添加AreaViewLocationFormats字符串數組。

您可以通過覆蓋FileExists,CreateView,CreatePartialView等方法進行進一步的自定義。

注意:不要忘記將views文件夾中的web.config複製到Membership控制器。否則,應用程序找不到所需的mvc命名空間,並且找不到像viewbag,model等符號。