web-dev-qa-db-ja.com

MVCとRazorのHtml.TextboxForとHtml.EditorForの違い

新しい「編集」ビューを追加するときにデフォルトでこれらが変更されたのはなぜですか? EditorFor()TextboxFor()を使用する利点は何ですか?

私はこれを見つけました

デフォルトでは、スキャフォールドの作成および編集は、Html.TextBoxForヘルパーの代わりにHtml.EditorForヘルパーを使用するようになりました。これにより、[ビューの追加]ダイアログボックスがビューを生成するときに、データアノテーション属性の形式でモデルのメタデータのサポートが向上します。

160
ShaneKm

EditorForの利点は、コードが<input type="text"に関連付けられていないことです。したがって、テキストボックスをdivでラップするようにレンダリングする方法の側面に何かを変更する場合、カスタムエディターテンプレート(~/Views/Shared/EditorTemplates/string.cshtml)を記述するだけで、アプリケーション内のすべてのテキストボックスが自動的にこの変更の恩恵を受けます。ハードコードされたHtml.TextBoxForは、どこでも変更する必要があります。データ注釈を使用して、これがレンダリングされる方法を制御することもできます。

155
Darin Dimitrov

TextBoxFor:指定された式に対応するテキスト入力html要素のようにレンダリングします。単純なWordでは、コントロールにバインドされているプロパティのデータ型に関係なく、常に入力テキストボックスのようにレンダリングされます。

EditorFor:このコントロールは少しスマートです。プロパティのデータ型に基づいてHTMLマークアップをレンダリングします。例えば。モデルにブールプロパティがあると仮定します。ビューでこのプロパティをチェックボックスとしてレンダリングするには、CheckBoxForまたはEditorForを使用できます。どちらも同じマークアップを生成します。

EditorForを使用する利点は何ですか?

知っているように、プロパティのデータ型に応じて、htmlマークアップを生成します。したがって、明日、モデルのプロパティのデータ型を変更した場合、ビューで何も変更する必要がないと仮定します。 EditorForコントロールは、htmlマークアップを自動的に変更します。

116
Harshal

Html.TextboxForは常にテキストボックス(<input type="text" ...)を作成します。

EditorForはタイプとメタ情報を確認し、指定した別のコントロールまたはテンプレートをレンダリングできます。

たとえば、DateTimeプロパティの場合、jQuery DatePickerを使用するテンプレートを作成できます。

54
GvS

これは、以前のコメントで言及されていない基本的な違いの1つです。
Readonlyプロパティは、textboxで機能し、EditorForでは機能しません。

@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })

上記のコードは機能しますが、次のようにreadonlyを制御することはできません。

@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })
7
Lalitha1729

文字列データ型の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">
4
Greg Gum