0

MVC.Net 3 では、EditorTemplate を使用して String やその他のプリミティブ型をレンダリングする方法をカスタマイズできます。

たとえば、私が持っている場合EditorTemplates/String.cshtml

@Html.TextBox("")

デフォルトのレンダリングを取得します。単純なモデルを考えてみましょう:

class Foo
{
   public string Route {get; set; }
}

フォームをレンダリングすると、次のようになります。

<div class="editor-label"><label for="Route">Test Route</label></div>
<div class="editor-field">
   <input data-val="true" data-val-required="The Test Route field is required." id="Route" name="Route" type="text"> 
   <span class="field-validation-valid" data-valmsg-for="Route" data-valmsg-replace="true"></span>
</div>

ここに質問があります: String.chtml では、 div の内側の html のみをカスタマイズできeditor-fieldます。div 自体をカスタマイズして、css クラスやその他の属性を追加するにはどうすればよいですか?

ありがとう

4

4 に答える 4

1

必要なものをカスタマイズするには、2 つの方法があります。

  1. モデル オブジェクトのエディター テンプレートを追加しますFoo。このようにして、テンプレートとモデルの間に結合された接続が発生します。モデルのすべての変更は、テンプレートに適用する必要があります。
  2. Views/ControllerName/EditorTemplatesまたはに Object.cshtm を追加して、内部オブジェクト テンプレートを上書きしViews/Shared/EditorTemplatesます。これはより一般的であり、疎結合です。

オブジェクト テンプレートのカスタマイズの詳細については、このリンクを参照してください。

編集:

で、Foo モデルを確認し、Foo の特定のObject.cshtmlカスタマイズを適用できます。

 @if (Model is Foo)
 {
    //specific customization for the Foo
 }
于 2013-05-02T06:34:53.753 に答える
1

object.cshtmlフォルダーにカスタムを実装する必要がありShared/EditorTemplates/ます。

いくつかの実装例については、この質問またはこの質問を参照してください

于 2013-05-02T05:04:16.930 に答える
0

投稿されたすべての回答は有効ですが、ソリューションを少しオーバーエンジニアリングしている可能性があります。密結合を回避することを懸念している場合は、von v の回答ジェネリックで説明されているエディター テンプレートを保持し、テンプレートのViewDataコレクションを介して追加のパラメーターを渡すことができます。たとえば、外側の div に追加したい追加のクラスの文字列がある場合...

@if (ViewData.ContainsKey("additionalClasses"))
{
    /* Append classes to div */
}
else 
{
    /* Div without classes */
}

additionalClassesこれで、次のようにメイン ビューから渡すことができます。

@EditorFor(m => m.Route, "MyTemplate", new { additionalClasses = "myclass" })
于 2013-05-02T08:02:48.760 に答える
0

これは、拡張メソッドEditorForが役立つ場所です。テンプレートに含めたマークアップ (例: String.cshmlt) は、 を使用すると書き出されますEditorFor。したがって、テンプレートにこれを含めることができます:

// you can basically do whatever you want here  
// add some label, span, etc.
<div class="some-class">
    <div class="another-class">
        @Html.TextBox(string.Empty, /* Name suffix */
            ViewData.TemplateInfo.FormattedModelValue /* Initial value */
        )
    </div>
</div>

そして、次のようにして、ビュー エンジンにレンダリングさせます。

@Html.EditoFor(m=>m.Route)
于 2013-05-01T13:31:20.933 に答える