MVC와 Razor에서 Html.TextboxFor와 Html.EditorFor의 차이점


170

새로운 "편집"보기를 추가 할 때 기본적으로 왜 이러한 사항이 변경 되었습니까? EditorFor()vs를 사용할 때 장점은 무엇입니까 TextboxFor()?

나는 이것을 찾았다

기본적으로 Create 및 Edit 스캐 폴드는 이제 Html.TextBoxFor 도우미 대신 Html.EditorFor 도우미를 사용합니다. 그러면 뷰 추가 대화 상자가 뷰를 생성 할 때 데이터 주석 속성 형식으로 모델의 메타 데이터에 대한 지원이 향상됩니다.


5
누구든지 이것이 어떻게 수행되는지에 대한 예를 가지고 있습니까? 예를 들어 DatePicker 용 편집기를 작성 하시겠습니까?
ShaneKm

답변:


166

장점은 EditorFor코드가에 묶여 있지 않다는 것 <input type="text"입니다. 당신이 당신의 텍스트 상자가에 그들을 배치와 같은 렌더링하는 방법의 측면에 변경 뭔가를 결정한다면 div당신은 단순히 사용자 정의 편집기 템플릿 (쓸 수 ~/Views/Shared/EditorTemplates/string.cshtml는 하드 코딩 한 경우 반면에) 자동으로이 변경 도움이됩니다 응용 프로그램의 모든 텍스트 상자를 Html.TextBoxFor당신을 어디서나 수정해야합니다. 데이터 주석을 사용하여 렌더링 방식을 제어 할 수도 있습니다.


이전 버전의 버그 일 수 있습니다. EditorFor가 'double'을 인식하지 못합니다. 'long'의 경우 'int'로 간주하고 step = "0.01"이 속성에서 작동하지 않으므로 TextBoxFor를 사용하고 @ type = 'number'@ step = "0.01"을 추가했습니다
Charlie

129

TextBoxFor : 지정된 표현식에 해당하는 텍스트 입력 html 요소처럼 렌더링됩니다. 간단히 말해서 컨트롤과 바인딩되는 속성의 데이터 유형에 관계없이 항상 입력 텍스트 상자처럼 렌더링됩니다.

EditorFor :이 컨트롤은 조금 똑똑합니다. 속성의 데이터 유형을 기반으로 HTML 마크 업을 렌더링합니다. 예를 들어 모델에 부울 속성이 있다고 가정합니다. 이 속성을 뷰에서 확인란으로 렌더링하려면 CheckBoxFor 또는 EditorFor를 사용할 수 있습니다. 둘 다 동일한 마크 업을 생성합니다.

EditorFor를 사용하면 어떤 이점이 있습니까?

아시다시피, 속성의 데이터 유형에 따라 html 마크 업이 생성됩니다. 따라서 내일 모델에서 속성의 데이터 유형을 변경하면 뷰에서 아무것도 변경할 필요가 없다고 가정하십시오. EditorFor control은 html 마크 업을 자동으로 변경합니다.


15
초보자도 쉽게 흡수 할 수있는 훌륭하고 간단한 답변입니다.
Kings

위의 설명은이 링크를 도움이 될 것입니다 forums.asp.net/t/1948071.aspx?EditorFor+and+EditorForModel
Amol Shiledar

TextBoxFor를 절대 사용해야하는 경우가 있습니까?
eaglei22

55

(가) Html.TextboxFor항상 텍스트 상자를 생성합니다 ( <input type="text" ...).

EditorFor는 유형과 메타 정보를보고 다른 컨트롤이나 사용자가 제공 한 템플릿을 렌더링 할 수 있습니다.

예를 들어 DateTime 속성의 경우 jQuery DatePicker를 사용하는 템플릿을 만들 수 있습니다.


12
editfor?를 사용하여 jquery datepicker를 구현하는 방법에 대한 예제
페루

2
날짜-시간 사례를 사용하여 차이를 단순화 해 주셔서 감사합니다.
Kings

1
@Peru는 여기 또는 여기에 방법에 implement jquery datepicker와 함께 사용하는 EditorFor것입니다 여기에
shaijut

8

이것은 이전 주석에서 언급되지 않은 기본 차이점 중 하나입니다.
Readonlyproperty는 textbox와 함께 작동하고 작동하지 않습니다 EditorFor.

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

위의 코드는 다음과 같이 읽기 전용으로 제어 할 수없는 곳에서 작동합니다 .

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

16
다음 구문을 사용하여 EditorFor를 읽기 전용으로 만들 수 있습니다. @ Html.EditorFor (model => model.DateSoldOn, new {htmlAttributes = new {@readonly = "readonly"}})
Doug Knudsen

4

문자열 데이터 유형의 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">

2
Texbox는 입력을 반환하고 editorfor는 입력이 editorfor의 기본 템플릿 인 템플릿을 반환한다는 점에서 절대적으로 잘못된 대답입니다.
Artem G
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.