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


170

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

私はこれを見つけました

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


5
これがどのように行われるかの例を誰かが持っていますか?たとえば、DatePickerのエディターを作成しますか?
ShaneKm 2011年

回答:


166

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


おそらく古いバージョンにバグがあります。EditorForは「double」を認識しません。'long'の場合、それは 'int'と見なされ、step = "0.01"は属性では機能しないため、TextBoxForを使用して@ type = 'number' @ step = "0.01"を追加したため、機能しました
Charlie

129

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

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

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

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


15
初心者でも簡単に吸収できる素晴らしいシンプルな答え。
キングス


TextBoxForを絶対に使用する必要があるケースはありますか?
eaglei22 2018年

55

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

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

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


12
editforを使用してjquery datepickerを実装する方法の例
ペルー

2
日時のケースを使用して違いを単純化してくれてありがとう。
キングス

1
@ペルー、ここまたはここimplement jquery datepickerでの使用方法と使用 方法EditorForこちら
shaijut

8

これは、前のコメントで言及されていない基本的な違いの1つです。
Readonlyプロパティはのテキストボックスで動作し、では動作しませんEditorFor

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

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

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

16
次の構文を使用してEditorForを読み取り専用にすることができます:@ Html.EditorFor(model => model.DateSoldOn、new {htmlAttributes = new {@readonly = "readonly"}})
Doug Knudsen

4

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

2
正解は間違いです。主な違いは、Texboxが入力を返し、editorforがテンプレートを返すことです。ここで、inputはeditorforのデフォルトテンプレートです。
Artem G
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.