新しい「編集」ビューを追加するときにデフォルトでこれらが変更されたのはなぜですか? EditorFor()
対TextboxFor()
を使用する利点は何ですか?
私はこれを見つけました
デフォルトでは、スキャフォールドの作成および編集は、Html.TextBoxForヘルパーの代わりにHtml.EditorForヘルパーを使用するようになりました。これにより、[ビューの追加]ダイアログボックスがビューを生成するときに、データアノテーション属性の形式でモデルのメタデータのサポートが向上します。
EditorFor
の利点は、コードが<input type="text"
に関連付けられていないことです。したがって、テキストボックスをdiv
でラップするようにレンダリングする方法の側面に何かを変更する場合、カスタムエディターテンプレート(~/Views/Shared/EditorTemplates/string.cshtml
)を記述するだけで、アプリケーション内のすべてのテキストボックスが自動的にこの変更の恩恵を受けます。ハードコードされたHtml.TextBoxFor
は、どこでも変更する必要があります。データ注釈を使用して、これがレンダリングされる方法を制御することもできます。
TextBoxFor:指定された式に対応するテキスト入力html要素のようにレンダリングします。単純なWordでは、コントロールにバインドされているプロパティのデータ型に関係なく、常に入力テキストボックスのようにレンダリングされます。
EditorFor:このコントロールは少しスマートです。プロパティのデータ型に基づいてHTMLマークアップをレンダリングします。例えば。モデルにブールプロパティがあると仮定します。ビューでこのプロパティをチェックボックスとしてレンダリングするには、CheckBoxForまたはEditorForを使用できます。どちらも同じマークアップを生成します。
EditorForを使用する利点は何ですか?
知っているように、プロパティのデータ型に応じて、htmlマークアップを生成します。したがって、明日、モデルのプロパティのデータ型を変更した場合、ビューで何も変更する必要がないと仮定します。 EditorForコントロールは、htmlマークアップを自動的に変更します。
Html.TextboxFor
は常にテキストボックス(<input type="text" ...
)を作成します。
EditorForはタイプとメタ情報を確認し、指定した別のコントロールまたはテンプレートをレンダリングできます。
たとえば、DateTimeプロパティの場合、jQuery DatePickerを使用するテンプレートを作成できます。
これは、以前のコメントで言及されていない基本的な違いの1つです。Readonly
プロパティは、textboxで機能し、EditorFor
では機能しません。
@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })
上記のコードは機能しますが、次のようにreadonlyを制御することはできません。
@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })
文字列データ型のhtml出力にもわずかな違いがあります。
Html.EditorFor:
<input id="Contact_FirstName" class="text-box single-line" type="text" value="Greg" name="Contact.FirstName">
Html.TextBoxFor:
<input id="Contact_FirstName" type="text" value="Greg" name="Contact.FirstName">