2011-01-28 9 views
146

新しい「編集」ビューを追加すると、デフォルトでこれらが変更されたのはなぜですか? EditorFor()TextboxFor()を使用した場合のメリットは何ですか? MVCとRazorのHtml.TextboxForとHtml.EditorForの相違点

は、私が見つかりました。デフォルトでは、この

、作成と編集の足場は今Html.TextBoxForヘルパーの代わりにHtml.EditorForヘルパーを使用しています。これにより、ビューの追加ダイアログボックスでビューが生成されるときに、モデルのメタデータのサポートが データ注釈属性の形式で向上します。

+4

これはどのように行われたのですか?たとえば、DatePickerのエディタを書くのですか? – ShaneKm

答えて

138

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

+0

こんにちはダーリン、あなたはn MVCの星.. thx – Irfan

53

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

EditorForはタイプとメタ情報を見て、あなたが提供する別のコントロールまたはテンプレートをレンダリングすることができます。

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

+12

どのようにjQueryのdatePickerのeditforを使用して実装する方法のすべての例? – Peru

+2

日時の大文字と小文字を区別していただきありがとうございます。 – Kings

+1

@Peru、[ここ](http://instinctcoder.com/asp-net-mvc-4-jquery-datepicker/)または[ここ](http://www.asp.net/mvc/overview/older- aspnet-mvc/with-html5-and-jquery-ui-datepicker-popup-calendar-as-aspnet-mvc-パート-4)は、 'jquery datepicker'を実装する方法であり、' EditorFor'でそれを使用することは[here](http://stackoverflow.com/a/23142692/2218697) – stom

102

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

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

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

私たちが知っているように、プロパティのデータ型に応じて、HTMLマークアップが生成されます。明日モデルのプロパティのデータ型を変更すると、ビュー内の何も変更する必要はありません。 EditorForコントロールはHTMLマークアップを自動的に変更します。

+10

で簡単に吸収することができます初心者。 – Kings

+0

上記の説明は、このリンクに役立ちます https://forums.asp.net/t/1948071.aspx?EditorFor+and+EditorForModel –

+0

絶対にTextBoxForを使用する必要がありますか? – eaglei22

3

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

重要な違いは、Texboxがinputを返し、editorforがテンプレートを返すのは間違った答えです。ここで、inputはeditorforのデフォルトテンプレートです。 –

5

これは、以前のコメントに記載されていない基本的な違いの一つである:
Readonlyプロパティは、テキストボックスのために働くだろうし、それがEditorForでは動作しません。あなたは読み取り専用に制御することはできません、次のようにコードの作品は、上記

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

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

次の構文を使用してEditorFor readonlyを作成できます。 @ Html.EditorFor(model => model.DateSoldOn、new {htmlAttributes = new {@readonly = "readonly"}}) –

関連する問題