2011-01-28 19 views
146

Dlaczego domyślnie zostały one zmienione podczas dodawania nowego widoku "edytuj"? Jakie są zalety korzystania z EditorFor() vs. TextboxFor()?Różnice między Html.TextboxFor i Html.EditorFor w MVC i Razor

Znalazłem to

Domyślnie Tworzenie i edytowanie rusztowania teraz użyć pomocnika Html.EditorFor zamiast pomocnika Html.TextBoxFor. Poprawia to obsługę metadanych w modelu w postaci atrybutów adnotacji danych , gdy okno dialogowe Dodaj widok generuje widok.

+4

Czy ktoś ma przykład tego, jak to zrobić? na przykład redaktor pisania dla DatePicker? – ShaneKm

Odpowiedz

138

Zalety EditorFor polega na tym, że Twój kod nie jest powiązany z <input type="text". Jeśli więc zdecydujesz się zmienić coś w tym, jak twoje pola tekstowe są renderowane jak owijanie ich w div, możesz po prostu napisać niestandardowy szablon edytora (~/Views/Shared/EditorTemplates/string.cshtml), a wszystkie twoje pola tekstowe w aplikacji automatycznie skorzystają z tej zmiany, a jeśli masz zakodowany na stałe Html.TextBoxFor będziesz musiał go modyfikować wszędzie. Możesz także użyć Adnotacji danych, aby kontrolować sposób renderowania.

+0

Witam @ Darin, byłeś gwiazdą MVC .. thx – Irfan

53

Zawsze tworzy pole tekstowe().

Podczas gdy EditorFor sprawdza typ i metadane oraz może renderować inny element sterujący lub dostarczany szablon.

Na przykład we właściwościach DateTime można utworzyć szablon wykorzystujący jQuery DatePicker.

+12

Dowolny przykład jak zaimplementować datakser jquery za pomocą editfor? – Peru

+2

dziękuję za uproszczenie różnicy za pomocą przypadku daty i czasu. – Kings

+1

@Peru, [tutaj] (http://instinctcoder.com/asp-net-mvc-4-jquery-datepicker/) lub [tutaj] (http://www.asp.net/mvc/overview/older- wersje/using-the-html5-i-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc/using-the-html5-and-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc- część-4) jest jak "implementować datepicker jquery" i używanie go z 'EditorFor' jest [tutaj] (http://stackoverflow.com/a/23142692/2218697) – stom

102

TextBoxFor: Wyrenderowany tekst będzie odpowiadał elementowi html odpowiadającemu określonemu wyrażeniu. W prostym słowie będzie zawsze renderować jak pole tekstowe wejściowe, niezależnie od typu danych właściwości, która jest łączona z formantem.

EditorFor: Ta kontrola jest nieco inteligentna. Wyświetla znaczniki HTML na podstawie typu danych właściwości. Na przykład. załóżmy, że w modelu istnieje właściwość boolowska. Aby wyrenderować tę właściwość w widoku jako pole wyboru, możemy użyć CheckBoxFor lub EditorFor. Obie będą generować ten sam znacznik.

Jaka jest zaleta korzystania z EditorFor?

Jak wiemy, w zależności od typu obiektu generuje on znaczniki html. Załóżmy więc, że jutro, jeśli zmienimy typ danych właściwości w modelu, nie trzeba niczego zmieniać w widoku. EditorFor automatycznie zmieni znaczniki html.

+10

wspaniałą, prostą odpowiedzią, która może być łatwo zaabsorbowana nawet przez nowicjusz. – Kings

+0

powyższy opis pomoże ten link https://forums.asp.net/t/1948071.aspx?EditorFor+i+EditorForModel –

+0

Czy kiedykolwiek był przypadek, w którym należy bezwzględnie używać TextBoxFor? – eaglei22

3

Istnieje również niewielka różnica w wynikach html dla typu danych ciąg.

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

to absolutnie błędna odpowiedź, ponieważ kluczową różnicą jest to, że Texbox zwraca dane wejściowe i edytor, aby zwrócić szablon, w którym input jest domyślnym szablonem dla editorfor. –

5

Jest to jedna z podstawowych różnic nie wymienionych w poprzednich komentarzach:
Readonly nieruchomość będzie współpracować z pola tekstowego i za to nie będzie działać z EditorFor.

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

Powyższy kod działa, gdzie podobnie jak w następstwie nie można dokonać kontroli do readonly.

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

Możesz utworzyć EditorFor jako readonly, używając następującej składni: @ Html.EditorFor (model => model.DateSoldOn, new {htmlAttributes = new {@readonly = "readonly"}}) –

Powiązane problemy