44

MVC をデフォルト以外のフォルダー (Views/Shared/EditorTemplates & Views/Shared/DisplayTemplates) に指定できますか? それらをそれらの下のサブフォルダーに配置するか、共有フォルダー外の他のフォルダーに配置したいと思います。

たとえば、このフォルダーの下にエディター テンプレートがあるとします。

~\Views\Order\ProductModel.cshtml

EditorFor テンプレートにこのテンプレート名を使用するように指示するにはどうすればよいですか?

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

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

考えられるすべての組み合わせで、.chstmlの有無にかかわらず、スラッシュとバックスラッシュを使用してみました。これはサポートされていないと思い始めていますが、なぜサポートされないのか想像できません。

4

3 に答える 3

55

いいえ、残念ながらあなたにはできません。

たとえば、このフォルダーの下にエディター テンプレートがあるとします。

これはもはやエディタ テンプレートではありません。パーシャルです。異なるコントローラー間でエディター テンプレートを共有したい場合は、それらを~/Views/Shared/EditorTemplatesフォルダー内に配置するだけです。

サブフォルダーに関する限り、これを行うことができます:

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

~/Views/CurrentController/EditorTemplates/Order/ProductModel.cshtmlまたは~/Views/Shared/EditorTemplates/Order/ProductModel.cshtmlエディター テンプレートをレンダリングします。

于 2011-10-20T20:26:45.263 に答える
4

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

あなたの例に があると仮定すると、次のようにOrderController、モデルの表示テンプレートをサブフォルダーに入れるだけです。

~\Views\Order\DisplayTemplates\ProductModel.cshtml

次に、ビューから通常どおり表示テンプレートを呼び出します (例: `~\Views\Order\Index.cshtml から):

@Html.DisplayFor(m => m.MyProductModelProperty)
于 2015-05-18T08:59:36.937 に答える
3

これを行う場合:

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

Foo をコレクションとして解析せず、エディター テンプレートを各アイテムに適用します。むしろ、エディタ テンプレートをコレクション全体に適用する必要があると想定します。

エディター テンプレートを各アイテムに個別に適用する場合は、それをビュー フォルダーの下の EditorTemplates フォルダーに配置し (優先されるため)、既定の構文を使用します。

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

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

于 2012-08-05T17:10:18.887 に答える