新しい「編集」ビューを追加すると、なぜデフォルトでこれらが変更されたのですか?使用する際の利点は何ですかEditorFor()対をTextboxFor()?
私はこれを見つけました
デフォルトで、CreateおよびEdit足場は、Html.TextBoxForヘルパーの代わりにHtml.EditorForヘルパーを使用するようになりました。これにより、[ビューの追加]ダイアログボックスがビューを生成するときに、データアノテーション属性の形式でモデルのメタデータのサポートが向上します。
新しい「編集」ビューを追加すると、なぜデフォルトでこれらが変更されたのですか?使用する際の利点は何ですかEditorFor()対をTextboxFor()?
私はこれを見つけました
デフォルトで、CreateおよびEdit足場は、Html.TextBoxForヘルパーの代わりにHtml.EditorForヘルパーを使用するようになりました。これにより、[ビューの追加]ダイアログボックスがビューを生成するときに、データアノテーション属性の形式でモデルのメタデータのサポートが向上します。
回答:
の利点EditorForは、コードがに関連付けられていないこと<input type="text"です。したがって、テキストボックスのレンダリング方法の側面に何かを変更するdiv場合は、カスタムエディターテンプレート(~/Views/Shared/EditorTemplates/string.cshtml)を作成するだけで、アプリケーション内のすべてのテキストボックスがこの変更から自動的に恩恵を受けますが、ハードコードしているHtml.TextBoxFor場合はどこでも変更する必要があります。データアノテーションを使用して、これをレンダリングする方法を制御することもできます。
TextBoxFor:指定された式に対応するテキスト入力html要素のようにレンダリングされます。簡単に言うと、コントロールとバインドされるプロパティのデータ型に関係なく、常に入力テキストボックスのようにレンダリングされます。
EditorFor:このコントロールは少しスマートです。プロパティのデータ型に基づいてHTMLマークアップをレンダリングします。たとえば、モデルにブールプロパティがあるとします。ビューでこのプロパティをチェックボックスとしてレンダリングするには、CheckBoxForまたはEditorForを使用できます。どちらも同じマークアップを生成します。
EditorForを使用する利点は何ですか?
ご存知のとおり、プロパティのデータ型に応じて、HTMLマークアップが生成されます。明日、モデルのプロパティのデータ型を変更した場合、ビューで何も変更する必要がないと仮定します。EditorForコントロールは、htmlマークアップを自動的に変更します。
これは、前のコメントで言及されていない基本的な違いの1つです。
Readonlyプロパティはのテキストボックスで動作し、では動作しません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">