2017-11-14 12 views
0

として使用される場合、EditorForヘルパーは、モデルを自動的に足場にするために使用できます。問題は、ラベル、フィールド、および検証メッセージを自動的に生成するため、このメソッドに渡された匿名型(new { htmlAttributes = ..})の各要素のスタイルとクラスをカスタマイズすることです。`EditFor`ヘルパーによって作成された各要素のカスタマイズ

+0

(より良い組織用サブフォルダに多分共有フォルダに入れて、と)EditorForヘルパーと一緒に使用することができます{ htmlAttributes = new {@class = "x"}} '、あなたはviewmodelプロパティか' ViewBag'からクラス 'x'を動的に変更したいですか? –

+0

@ TetsuyaYamamoto:いいえ、EditorForは、モデルの個々のメンバーと一緒にモデル全体を足場にすることができます。自動スキャフォールディングでは、Label( 'text-danger')、field( 'form-control')、validation( 'validation-error')など、足場アイテムの種類ごとにcssクラスを定義するにはどうすればよいですか? – Arrrr

答えて

1

EditorTemplateを使用する必要があり、EditorForヘルパーがテンプレートに基づいてモデルを自動的にレンダリングするため、ビューのカスタマイズにhtmlAttributesプロパティを使用する必要はありません。この利点は、あなたのテンプレートが終わって再利用することができ、オーバー特別に、それはなどDateTimeIFormFile、などのタイプのためである場合は、次の例を参照することができ、ということである:

UserModelTemplate.cshtml: 
------------------------- 
@model UserModel 

<div class="form-group"> 
    <label class="hero-label"> 
     @Html.DisplayNameFor(m=> m.Username) 
     <span class="text-danger"> 
      @Html.ValidationMessageFor(m=> m.Username) 
     </span> 
    </label> 
    @Html.TextBoxFor(m=> m.Username, new { @class = "form-control"}) 
</div> 

そして、あなたは次のように続けることができますそれ。あなたのテンプレートを開発完了したら、あなたは `新しいとは何したいですか

@Html.EditorFor(model=> model, "UserModelTemplate") 
+0

テンプレートは、クラス(この場合は 'UserModel.cshtml')と同じ名前をつけ、'/Views/Shared/EditorTemplates'フォルダに置かれ、 '@Html.EditorFor(m => m)' –

+0

@StephenMuecke:そうですが、デフォルトの動作を無効にすると、1つのモデルまたは要素に対して複数のテンプレートを定義し、該当する場所で使用することができます。 – Transcendent

+0

はい、コレクション用に使用することはできません。 –

関連する問題