2011-10-20 5 views
38

MVCをデフォルトのもの以外のフォルダにポイントできますか(Views/Shared/EditorTemplates & Views/Shared/DisplayTemplates)?私はそれらの下のサブフォルダ、またはSharedフォルダーの外にある他のフォルダーに入れたいと思います。例えばデフォルト(EditorTemplates/DisplayTemplates)以外のフォルダからのMVCテンプレート?

、私はこのフォルダの下にエディタのテンプレートを持っている場合:

~\Views\Order\ProductModel.cshtml

がどのように私はこのtempalte名前を使用するために私のEditorForテンプレートを伝えることができますか?

私は完全にそれを修飾しようとしたが、これは動作しません:

@Html.EditorFor(m => m.ProductModel, @"~\Views\Order\ProductModel.cshtml") 

私は前方に使用して試した、.chstmlなし/と、私は考えることができるすべての組み合わせを&バックスラッシュをスラッシュ。私はこれがサポートされていないと思っていますが、なぜそうでないのか想像できません。

答えて

47

いいえ、これはできません。

For example, if I have an editor template under this folder

これはもはやエディタテンプレートではありません。それは部分的です。異なるコントローラー間でエディターテンプレートを共有したい場合は、単に~/Views/Shared/EditorTemplatesフォルダーに入れてください。

限りサブフォルダが懸念しているとして、あなたはこれを行うことができます:~/Views/CurrentController/EditorTemplates/Order/ProductModel.cshtmlまたは~/Views/Shared/EditorTemplates/Order/ProductModel.cshtmlエディタのテンプレートをレンダリングします

@Html.EditorFor(x => x.Foo, "Order/ProductModel") 

を。あなたがこれを行う場合は

+6

これは意味があります。あなたがコントローラのビューフォルダの下にEditor/DisplayTemplateフォルダを持つことができるかどうかは分かりませんでした。それは私がやろうとしていることを成し遂げます。ダーリンに感謝します。 –

+0

2番目のパス: '〜/ Views/Shared/EditorTemplates/Order/ProductModel.cshtml'が私のために見つかりません...問題がありますか? – Dmitry

+0

実際にはそれが見つかりましたが、私にエラーが表示されます: '辞書に渡されたモデルアイテムは 'System.Collections.Generic.List''1 [Whatever.Models.ProductModel]'タイプですが、この辞書にはモデルアイテムが必要です'Whatever.Models.ProductModel'のタイプの。 – Dmitry

3

@Html.EditorFor(x => x.Foo, "Order/ProductModel") 

をそれがコレクションとしてはFooを解析し、各項目にごエディタのテンプレートを適用しません。むしろあなたのエディタテンプレートをコレクション全体に適用する必要があると想定します。

あなたは自分のビューのフォルダの下EditorTemplatesのフォルダに配置し(それが優先されますよう)とデフォルトの構文を使用して、個別に各項目にエディタテンプレートを適用する場合:もちろん

@Html.EditorFor(x => x.Foo) 

を、エディタテンプレートの名前は、コレクション内のアイテムのタイプと一致する必要があります。

4

古い質問ですが、特定のコントローラの表示/エディタテンプレートを追加するには、DisplayTemplatesまたはEditorTemplatesサブフォルダに追加するのが適切です。

あなたの例では、あなたはOrderControllerを持っている、あなたは、単にこのように、サブフォルダにあなたのモデルの表示テンプレートを置くことができる、と仮定すると:

~\Views\Order\DisplayTemplates\ProductModel.cshtml 

その後、EX(あなたのビューから正常に表示テンプレートを呼び出します:〜\ Views \ Order \ Index.cshtml):

@Html.DisplayFor(m => m.MyProductModelProperty) 
+1

この答えは、エディタ/ディスプレイテンプレートが共有されるのではなく、特定のコントローラ内に含まれるようになったときの問題を解決します。保守性のために時には再利用できないものを再利用しようとするのを避けます。この回答に1つの投票。 –

関連する問題