2017-11-14 3 views
0

으로 사용할 경우 모델을 자동으로 스캐 폴딩 할 때 EditorFor 도우미를 사용할 수 있습니다. 문제는 레이블, 필드 및 유효성 검사 메시지를 자동으로 생성하므로이 메서드에 전달 된 익명 형식 (new { htmlAttributes = ..})의 각 요소에 대한 스타일과 클래스를 사용자 지정하는 것입니다.`EditorFor` 도우미로 작성한 각 요소 사용자 정의

+0

(더 나은 조직에 대한 하위 폴더에 어쩌면 공유 폴더에 장소 그것 등) EditorFor 도우미와 함께 사용할 수 있습니다 { htmlAttributes = new {@class = "x"}}', viewmodel 속성이나'ViewBag'에서 클래스 'x'를 동적으로 변경 하시겠습니까? –

+0

@ TetsuyaYamamoto : 아니요, EditorFor는 모델의 개별 구성원과 함께 전체 모델을 스캐 폴딩 할 수 있습니다. 자동 스캐 폴딩에서는 Label ('text-danger'), 필드 ('form-control') 및 유효성 검사 ('validation-error')와 같은 각 유형의 스캐 폴드 항목에 대한 CSS 클래스를 어떻게 정의 할 수 있습니까? – Arrrr

답변

1

EditorTemplate을 사용해야하고 EditorFor 도우미가 템플릿을 기반으로 모델을 자동으로 렌더링하므로 뷰를 사용자 정의하는 데 htmlAttributes 속성을 사용할 필요가 없습니다. 이것의 장점은 귀하의 템플릿을 통해 재사용 할 수 있다는 것입니다 이상 특별히 당신이 다음의 예를 참조 할 수 있습니다 등 DateTime, IFormFile, 같은 유형의 경우 :

UserModelTemplate.cshtml: 
------------------------- 
@model UserModel 

<div class="form-group"> 
    <label class="hero-label"> 
     @Html.DisplayNameFor(m=> m.Username) 
     <span class="text-danger"> 
      @Html.ValidationMessageFor(m=> m.Username) 
     </span> 
    </label> 
    @Html.TextBoxFor(m=> m.Username, new { @class = "form-control"}) 
</div> 

을 그리고 당신처럼 계속 할 수 있습니다 그. 당신이 당신의 템플릿을 개발 완료 후에는 '새와 어떻게할까요

@Html.EditorFor(model=> model, "UserModelTemplate") 
+0

템플릿은 클래스 (이 경우'UserModel.cshtml')와 동일한 이름을 가져야하고'/ Views/Shared/EditorTemplates' 폴더에 있어야합니다 - 그리고 나서 단지'@Html.EditorFor (m => m)' –

+0

@StephenMuecke : 그렇습니다. 기본 동작을 재정의하면 단일 모델 또는 요소에 대해 여러 템플릿을 정의하고 적용 가능한 경우 사용할 수 있습니다. – Transcendent

+0

예, 그렇지만 컬렉션에 사용할 수는 없습니다. '/ Views/ControllerName/EditorTemplates' 폴더에있는 각 컨트롤러에 대한'EditorTemplate'입니다. –

관련 문제