[asp.net-mvc] MVC와 Razor에서 Html.TextboxFor와 Html.EditorFor의 차이점

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

나는 이것을 찾았다

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



답변

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


답변

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

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

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

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


답변

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

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

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


답변

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

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

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

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


답변

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


답변