2011-01-28 83 views
146

爲什麼在添加新的「編輯」視圖時這些內容默認會更改?使用EditorFor()TextboxFor()時有什麼優勢?MVC和Razor中的Html.TextboxFor和Html.EditorFor之間的差異

我發現這個

默認情況下,創建和編輯支架現在使用的Html.EditorFor幫手,而不是Html.TextBoxFor幫手。當「添加視圖」對話框生成視圖時,這會改進對數據註釋屬性形式的模型元數據的支持。

+4

沒有人有這樣做的例子嗎?例如編寫DatePicker的編輯器? – ShaneKm 2011-01-28 08:25:30

回答

138

EditorFor的優點是您的代碼不綁定到<input type="text"。因此,如果您決定改變某些方面,比如將文本框渲染爲如何將其包裝在div中,則只需編寫一個自定義編輯器模板(~/Views/Shared/EditorTemplates/string.cshtml),並且您應用程序中的所有文本框都將自動受益於此更改,而如果您擁有硬編碼Html.TextBoxFor你將不得不在任何地方修改它。您也可以使用數據註釋來控制它的呈現方式。

+0

嗨@Darin,你是MVC明星.. thx – Irfan 2017-07-20 15:42:38

53

Html.TextboxFor始終創建一個文本框(<input type="text" ...)。

雖然EditorFor查看類型和元信息,並且可以呈現您提供的另一個控件或模板。

例如,對於DateTime屬性,您可以創建一個使用jQuery DatePicker的模板。

+12

任何關於如何使用editfor實現jquery datepicker的例子? – Peru 2014-01-09 10:27:40

+2

感謝您通過使用日期時間案例來簡化差異。 – Kings 2015-02-28 18:04:51

+1

@Peru,[這裏](http://instinctcoder.com/asp-net-mvc-4-jquery-datepicker/)或[這裏](http://www.asp.net/mvc/overview/older-版本/使用最HTML5的和jQuery的UI的日期選擇器,彈出式日曆與-ASPNET-MVC /使用最HTML5的和jQuery的UI的日期選擇器,彈出式日曆與-ASPNET,mvc-第4部分)是如何實現jquery datepicker和使用它與EditorFor是[這裏](http://stackoverflow.com/a/23142692/2218697) – stom 2015-08-01 09:48:39

102

TextBoxFor:它將呈現與文本輸入HTML元素相對應的指定表達式。簡單地說,它將總是呈現爲一個輸入文本框,而不管與該控件綁定的屬性的數據類型如何。

EditorFor:這個控件有點聰明。它根據屬性的數據類型呈現HTML標記。例如。假設模型中有一個布爾屬性。要將視圖中的該屬性作爲複選框呈現,我們可以使用CheckBoxFor或EditorFor。兩者都會生成相同的標記。

使用EditorFor的優點是什麼?

正如我們所知,根據屬性的數據類型它會生成html標記。所以假設明天如果我們改變模型中屬性的數據類型,不需要改變視圖中的任何東西。 EditorFor控件將自動更改html標記。

+10

偉大的,簡單的答案,即使通過一個很容易吸收新手。 – Kings 2015-02-28 18:06:33

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"> 
5

這是在以前的評論未提及的基本區別之一:
Readonly屬性將與文本的工作,它不會與EditorFor工作。

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

上面的代碼工作,其中與下面你不能使控制只讀

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