MVCをデフォルト以外のフォルダー(Views/Shared/EditorTemplates&Views/Shared/DisplayTemplates)にポイントできますか?それらをその下のサブフォルダ、または共有フォルダ外の他のフォルダに配置します。
たとえば、このフォルダーの下にエディターテンプレートがある場合:
〜\ Views\Order\ProductModel.cshtml
EditorForテンプレートにこの一時的な名前を使用するように伝えるにはどうすればよいですか?
私はそれを完全に修飾しようとしましたが、これはうまくいきません:
@Html.EditorFor(m => m.ProductModel, @"~\Views\Order\ProductModel.cshtml")
スラッシュとバックスラッシュを、.chstmlの有無にかかわらず、考えられるすべての組み合わせで使用してみました。これはサポートされていないと思い始めていますが、なぜサポートされないのか想像できません。
いいえ、できません。
たとえば、このフォルダーの下にエディターテンプレートがある場合
これは、もはやエディターテンプレートではありません。それは部分的です。異なるコントローラー間でエディターテンプレートを共有する場合は、それらを~/Views/Shared/EditorTemplates
フォルダー内に配置するだけです。
サブフォルダに関する限り、これを行うことができます:
@Html.EditorFor(x => x.Foo, "Order/ProductModel")
~/Views/CurrentController/EditorTemplates/Order/ProductModel.cshtml
または~/Views/Shared/EditorTemplates/Order/ProductModel.cshtml
エディターテンプレートをレンダリングします。
古い質問ですが...特定のコントローラーのディスプレイ/エディターテンプレートを追加する適切な方法は、DisplayTemplates
またはEditorTemplates
サブフォルダーに追加することです。
あなたの例では、あなたがOrderController
を持っていると仮定すると、次のようにモデルの表示テンプレートをサブフォルダーに置くだけです:
~\Views\Order\DisplayTemplates\ProductModel.cshtml
次に、通常はビューから表示テンプレートを呼び出します(例: `〜\ Views\Order\Index.cshtmlから):
@Html.DisplayFor(m => m.MyProductModelProperty)
これを行う場合:
@Html.EditorFor(x => x.Foo, "Order/ProductModel")
fooをコレクションとして解析し、エディターテンプレートを各アイテムに適用しません。それはむしろあなたのエディタテンプレートが全体としてコレクションに適用されるべきであると仮定します。
エディターテンプレートを各アイテムに個別に適用する場合は、ビューフォルダーの下のEditorTemplatesフォルダーに配置し(優先順位が高いため)、デフォルトの構文を使用します。
@Html.EditorFor(x => x.Foo)
もちろん、エディターテンプレートの名前は、コレクション内のアイテムのタイプと一致する必要があります。