MVC ve Razor'da Html.TextboxFor ve Html.EditorFor arasındaki farklar


170

Yeni bir "düzenle" görünümü eklerken bunlar varsayılan olarak neden değiştirildi? Kullanırken avantajları nelerdir EditorFor()VS. TextboxFor()?

Bunu buldum

Varsayılan olarak, Oluştur ve Düzenle iskeleleri artık Html.TextBoxFor yardımcısı yerine Html.EditorFor yardımcısını kullanır. Bu, Görünüm Ekle iletişim kutusu bir görünüm oluşturduğunda modeldeki veri verisi öznitelikleri biçimindeki meta veri desteğini geliştirir.


5
bunun nasıl yapıldığına dair bir örneği var mı? örneğin bir DatePicker için editör yazmak?
ShaneKm

Yanıtlar:


166

Avantajları, EditorForkodunuzun bir ile bağlantılı olmamasıdır <input type="text". Eğer metin kutularının bir onları sarma gibi oluşturulur nasıl yönüne değişiklik şeye karar Yani eğer divsadece özel bir editör şablonu (yazabiliriz ~/Views/Shared/EditorTemplates/string.cshtmlsen kodlanmış varsa oysa) ve otomatik olarak bu değişimden yararlanacak uygulamanızda tüm metin kutularının Html.TextBoxForsizi her yerde değiştirmek zorunda kalacak. Bunun nasıl oluşturulacağını kontrol etmek için Veri Ek Açıklamaları'nı da kullanabilirsiniz.


Muhtemelen eski bir versiyonda bir hata var. EditorFor 'çift' tanımıyor. 'Uzun' için bunu 'int' olarak kabul eder ve step = "0.01" özniteliklerde çalışmaz, bu yüzden TextBoxFor'u kullandım ve @ type = 'number' @ step = "0.01" ekledim
Charlie

129

TextBoxFor : Belirtilen ifadeye karşılık gelen metin girişi html öğesi gibi oluşturulur. Basit bir deyişle, her zaman denetim ile bağlanan özelliğin veri türü ne olursa olsun bir giriş metin kutusu gibi işleyecektir.

EditorFor : Bu kontrol biraz akıllı. Özelliğin veri türüne göre HTML işaretlemesi oluşturur. Örneğin, modelde bir mantıksal özellik olduğunu varsayalım. Bu özelliği görünümde onay kutusu olarak oluşturmak için CheckBoxFor veya EditorFor'u kullanabiliriz. Her ikisi de aynı işaretlemeyi oluşturur.

EditorFor kullanmanın avantajı nedir?

Bildiğimiz gibi, mülkün veri tipine bağlı olarak html işaretlemesi oluşturur. Öyleyse yarın, modeldeki mülkün veri türünü değiştirirsek, görünümde hiçbir şeyi değiştirmeye gerek yoktur. EditorFor kontrol html işaretlemesini otomatik olarak değiştirir.


15
bir acemi tarafından bile kolayca emilebilen harika, basit bir cevap.
Kings

yukarıdaki açıklama bu bağlantıya yardımcı olacaktır forums.asp.net/t/1948071.aspx?EditorFor+and+EditorForModel
Amol Shiledar

Kesinlikle TextBoxFor kullanmanız gereken bir durum var mı?
eaglei22

55

Her Html.TextboxForzaman bir metin kutusu ( <input type="text" ...) oluşturur .

EditorFor türü ve meta bilgilerine bakarken ve sağladığınız başka bir denetimi veya şablonu oluşturabilir.

Örneğin DateTime özellikleri için jQuery DatePicker kullanan bir şablon oluşturabilirsiniz.


12
EditFor kullanarak jquery datepicker nasıl uygulanacağı hakkında herhangi bir örnek?
Peru

2
tarih-saat durumunu kullanarak farkı basitleştirdiğiniz için teşekkür ederiz.
Kings

1
@Peru, burada veya burada nasıl implement jquery datepickerve ile birlikte EditorForkullanım burada
shaijut

8

Bu, önceki yorumlarda belirtilmeyen temel farklılıklardan biridir:
Readonlyözellik, metin kutusu ile çalışacak ve çalışmayacaktır EditorFor.

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

Yukarıdaki kod çalışır, burada aşağıdaki gibi salt okunur kontrol sağlayamazsınız .

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

16
Aşağıdaki sözdizimini kullanarak EditorFor'u salt okunur yapabilirsiniz: @ Html.EditorFor (model => model.DateSoldOn, yeni {htmlAttributes = new {@readonly = "readonly"}})
Doug Knudsen

4

Bir dize veri türü için html çıktısında da küçük bir fark vardır.

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
bu kesinlikle yanlış bir cevaptır, çünkü önemli fark Texbox'ın girdi döndürdüğü ve editörün şablonun döndürdüğü, girdinin editorfor için varsayılan şablon olduğu yerdir.
Artem G
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.