2012-10-25 23 views
13

私はASP.NET MVC 3プロジェクトに取り組んでいます。簡単にするために、コントローラ、モデル、およびビューをサブフォルダで分割したいと考えています。私はコントローラとモデルでそれを行うことができますが、私はそれがルートフォルダViewsに自動的に作成するビューを作成するときに、この問題を解決する方法はありますか?ASP.NET MVC 3のサブフォルダ内にビューを追加

例えば、 I

Controllers/Finance/BankController/Create 
Controllers/Finance/BudgetController/Create 
Controllers/Production/ProcessController/Create 

私は上記のアクションのためにビューを作成しようとしたとして

Models/Finance/Bank.cs 
Models/Finance/Finance.cs 
Models/Production/Production.cs 

コントローラとして

モデルクラスを作成することができ、それに作成し、

Views/Bank/Create.aspx 
Views/Budget/Create.aspx 
Views/Process/Create.aspx 

私はそれが欲しいと思う、

Views/Finance/Bank/Create.aspx 
Views/Finance/Budget/Create.aspx 
Views/Prodution/Process/Create.aspx 

コントローラとモデル用に作成されたものと同じサブフォルダ内にビューを作成する方法はありますか?ありがとう!

+0

ここには何かがありません。 'CustomerController'は2つのフォルダを必要としません。 –

答えて

17

モデルとコントローラはコンパイルされたソースファイルです。 DLLにコンパイルされているので、文字通りプロジェクトのどこにでも置くことができ、違いはありません。これらのクラスは、コンパイルされたファイルシステムには存在しないため、ファイルシステム内での位置の概念はありません。

ビューは、異なっています。それらはサーバーに展開され、実行時に読み込まれ、解析されるテキストファイルなので、フレームワークはそれらを見つける場所を知る必要があります。

ツールは、〜\ Views \ Controllerフォルダ(または〜Areas \ AreaName \ Controllerフォルダ)に常にビューを作成します。それ以降はどこでも移動できますが、フォルダパス全体をView()メソッド(.cshtmlを含む)に渡す必要があります。または、必要な場所で検索パスを設定するカスタムViewEngineを実装する必要があります。

0

Viewの名前はコントローラの名前に従って、ルールに従ってください。
Views/Admin/Createを作成する場合は、CustomerController.csの名前をAdminController.csとする必要があります。

+2

これはサブコントローラにどのように変換されますか?例えば。 'Views/Admin/Customers/Create'に' AdminController'と 'CustomersController'サブコントローラがあります。 – Dan

21

次の手順は、Views(ルートフォルダ)に好きな

  1. は、サブフォルダを作成し、私のために働きました。私の場合、それは財務でした&生産。

  2. 自動的に作成されたViewsのフォルダを適切なサブフォルダにドラッグするだけです。私の場合にはBank & FinanceにでBudgetProcess中にProduction

  3. あなたは

    returnView("~/Views/Finance/Bank/Create.aspx")

    returnView("~/Views/Finance/Budget/Create.aspx")

    、としてビューのフルパスを与え、コントローラのアクションからビューを返しますが

    returnView("~/Views/Production/Process/Create.aspx")

+3

これは@Mystere Manが提案したものです。別の答えを書く理由はありません。彼の答えは受け入れられるとマークしてください。 –

+1

それはひげそりのcshtmlでもうまくいきました。例: "戻るビュー("〜/ Views/SomeSubFolder/Login.cshtml "); – granadaCoder