2011-02-05 8 views
3

私はASP.Net MVC(3)を使っていましたが、今はかなり好きです。しかし、私はちょっと迷惑を感じることは、コントローラ/ビュー/モデル/スクリプトディレクトリの間を常にブラウズすることです。だから、別の場所にあるファイルを探すようにMVCに指示する方法があるのだろうか?ASP.Net MVCのディレクトリ構造を変更する

たぶん誰かがどのように単にグループにファイルを一緒コントローラによってように私を伝えることができます:

ディレクトリ:/会員

  • MembershipController
  • LogOnView
  • LogOnModel
  • RegisterView
  • RegisterModel

種類は、私が解決策とは対照的に、あなたは、あなたがソリューションナビゲーターに表示することができ、VS 2010

のためにそのようにパワーツールのアップデートを通じてソリューションナビゲーター拡張を取得する必要があると思う オラフ

+0

MVCエリアに興味があると思います:http://msdn.microsoft.com/en-us/library/ ee671793.aspx –

+0

@カーク私はMVC領域を使用した後でも、彼がブラウズする必要がある各領域にはまだコントローラ/ビュー/モデルがあります。 –

+1

Resharperをインストールします。コントローラーやビューなど(アイデアのキーバインド付き)に行くには、Ctrl-Nを押して名前を入力してから、リストから選択してください。あなたのツールは人生を楽にします。残念ながらスクリプトではうまくいきません。 -/ – Sean

答えて

1

についてエクスプローラは、例えば、開いているファイルのみ。もっと楽になります。

はところで、例えば、すべてのモデルのフォルダを削除し、別のモデルプロジェクトを作成します。

MyApp.Domain 

この恩恵を受ける基本を超えているすべてのソリューションを。

あなたの質問へのコメントに記載されているように、エリアによってナビゲーション要件も減少します。

2

あなたが話していることを正確に知っています。ここで私が不利であることをデフォルトMVCのフォルダ構造を見つける条件は以下のとおりです。私はモデル・パー・ビューのアプローチを使用してい

  • 私のコントローラは、基本的にはそれだけで一つの特定のビュー
  • Iで動作します
  • そのビューにのみ関連するJavaScriptをいくつか持っています

なぜこれらの部分を別のフォルダに配置したいのですか?

は私がビューフォルダ内のビュー用のフォルダを作成しますので、あなたは(ちょうど伝統的なMVCのアプローチのような)フォルダ〜/ビュー/ MyEntityListがありますが、私はそこに、そのコンポーネントに関係すべてを置く:

~/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

これを実現する方法の1つは、カスタムビューエンジンを作成することです。あなたは、モデルは、あなたは、単に変更することができます問題になることはありませんコントローラ/メンバー内のファイル

  • MembershipController
  • LogOnView
  • LogOnModel
  • RegisterView
  • RegisterModel

の下に、これらすべてを置くことができますモデルの名前空間、唯一の問題はビューです。このために、カスタムビューエンジンを作成して、mvcアプリケーションがビューファイルの物理的な位置を次のように知るようにします。 global.asax.csで

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

     }; 
    } 
} 

(のApplication_StartでViewEngineを追加)次のコード

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

含むことによってまたに応じてレイアウト属性を更新するなど、さまざまな他の要因の世話をする必要がありますここで_Layout.cshtmlを配置します。

領域を使用している場合は、AreaViewLocationFormats文字列配列も追加します。

FileExists、CreateView、CreatePartialViewなどのメソッドの一部をオーバーライドすることで、さらにカスタマイズすることができます。

注:viewsフォルダのweb.configをメンバシップコントローラにコピーすることを忘れないでください。そうでなければ、アプリケーションは必要なmvcネームスペースを見つけず、ビューバック、モデルなどのシンボルを見つけません。

関連する問題