Różnice między Html.TextboxFor i Html.EditorFor w MVC i Razor


170

Dlaczego domyślnie zostały one zmienione podczas dodawania nowego widoku „edycji”? Jakie są zalety korzystania z EditorFor()vs. TextboxFor()?

znalazłem to

Domyślnie rusztowania tworzenia i edycji używają teraz 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.


5
czy ktoś ma przykład jak to się robi? na przykład redaktor dla DatePicker?
ShaneKm

Odpowiedzi:


166

Zaletą EditorForjest to, że Twój kod nie jest powiązany z plikiem <input type="text". Więc jeśli zdecydujesz się coś zmienić w aspekcie renderowania twoich pól tekstowych, jak zawijanie ich w a, divmożesz po prostu napisać niestandardowy szablon edytora ( ~/Views/Shared/EditorTemplates/string.cshtml), a wszystkie pola tekstowe w aplikacji automatycznie skorzystają z tej zmiany, podczas gdy jeśli zakodowałeś Html.TextBoxForcię na stałe będzie musiał go wszędzie modyfikować. Możesz również użyć adnotacji danych, aby kontrolować sposób renderowania.


Wystąpił błąd, prawdopodobnie w starej wersji. EditorFor nie rozpoznaje słowa „double”. Dla „long” traktuje to jako „int”, a step = „0.01” nie działa w atrybutach, więc użyłem TextBoxFor i dodałem @ type = 'number' @ step = "0.01", więc zadziałało
Charlie

129

TextBoxFor : będzie renderować się jak element html do wprowadzania tekstu odpowiadający określonemu wyrażeniu. Mówiąc prościej, zawsze będzie renderować się jak wejściowe pole tekstowe, niezależnie od typu danych właściwości, które są wiązane z kontrolką.

EditorFor : Ta kontrolka jest nieco inteligentna. Renderuje znaczniki HTML na podstawie typu danych właściwości. Załóżmy na przykład, że w modelu istnieje własność boolowska. Aby wyświetlić tę właściwość w widoku jako pole wyboru, możemy użyć CheckBoxFor lub EditorFor. Oba będą generować te same znaczniki.

Jaka jest zaleta korzystania z EditorFor?

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


15
świetna, prosta odpowiedź, którą może łatwo przyswoić nawet nowicjuszowi.
Kings


Czy jest kiedykolwiek przypadek, w którym bezwzględnie powinieneś używać TextBoxFor?
eaglei 22

55

Html.TextboxForZawsze tworzy pole tekstowe ( <input type="text" ...).

Podczas gdy EditorFor sprawdza typ i metainformacje i może renderować inną kontrolkę lub dostarczony szablon.

Na przykład dla właściwości DateTime można utworzyć szablon, który używa jQuery DatePicker.


12
Dowolny przykład, jak zaimplementować datepicker jquery przy użyciu editfor?
Peru,

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

1
@Peru, tutaj lub tutaj, jak to zrobić implement jquery datepickeri jak z niego korzystać, EditorForjest tutaj
shaijut

8

Jest to jedna z podstawowych różnic, o których nie wspomniano w poprzednich komentarzach:
Readonlywłaściwość będzie działać z polem tekstowym i nie będzie działać z EditorFor.

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

Powyższy kod działa, gdzie podobnie jak w przypadku podążania nie można ustawić sterowania tylko do odczytu .

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

16
Możesz ustawić EditorFor tylko do odczytu, używając następującej składni: @ Html.EditorFor (model => model.DateSoldOn, new {htmlAttributes = new {@readonly = "readonly"}})
Doug Knudsen

4

Istnieje również niewielka różnica w danych wyjściowych html dla typu danych typu string.

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
to absolutnie zła odpowiedź, ponieważ kluczową różnicą jest to, że Texbox zwraca dane wejściowe, a edytor for zwraca twój szablon, gdzie wejście jest domyślnym szablonem dla editor for.
Artem G
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.