EditorFor
확장 메서드는 모델의 유형에 해당하는 EditorTemplates 파일에있는 PartialView에 모델을 연결합니다 (이 경우에는 Boolean.cshtml
이어야합니다).
편집기 템플릿에 조건부 논리를 추가하여 목표를 달성 할 수 있습니다. 또한 부분 값에 MoreInstructorsAllowed
속성의 값을 알 수있는 방법을 제공하고 additionalViewData
매개 변수가있는 EditorFor
오버로드를 사용하여이 정보를 전달할 수 있습니다.
솔직히 말해서, 부울 처리의 기본 기능을 변경하는 것이 당신이하려는 일에 조금 닮은 것 같습니다. 이 두 필드가 근본적으로 연결되어 있다면 두 필드의 합성을 만들고 부울 자체가 아닌 합성보기에 부분보기를 연결하는 것이 더 합리적입니다. 내 말은 다음과 같습니다
public class InstructorProperty {
public bool IsInstructor { get; set; }
public bool MoreInstructorsAllowed { get; set; }
}
및 에서 유일한 문제는 /Shared/EditorTemplates/InstructorProperty.cshtml
@model InstructorProperty
// ... Your view logic w/ the @if(MoreInstructorsClause) here.
지금 당신이 CheckboxFor
방법을 사용하는 데 문제 다시 것을 EditorFor
메서드는 특수 html 속성을 허용하지 않으므로 "disabled"속성을 적용해야합니다. ModelMetadataProvider
을 무시하고 ModelMetadataProvider에서 처리를 제공하는 특성으로 특성을 꾸미는 것으로 알려진 해결 방법이 있습니다. 이 기법의 실제 예제는 http://aspadvice.com/blogs/kiran/archive/2009/11/29/Adding-html-attributes-support-for-Templates-2D00-ASP.Net-MVC-2.0-Beta_2D00_1.aspx에서 얻을 수 있습니다. 그러나 (1) 불리언보기를 무시하고 HTML을 하드 코딩하거나 거기에서 CheckboxFor를 사용하거나, 보기에서 CheckboxFor
메서드를 사용하거나, (3) HTML을 하드 코딩해야합니다. InstructorProperty
보기로 이동하십시오. 내 솔루션이 InstructorProperty
보기를 사용하고 단지 추가하는 것, 그래서 나는 그것이 이상 그런 사소한 일에 대한 설계를 복잡하게하는 의미가 있다고 생각하지 않습니다
@Html.CheckboxFor(_=>_.IsInstructor,
htmlAttributes: (Model.MoreInstructorsAllowed ? null : new { disabled = "disabled"}).ToString().ToLowerInvariant() });
을하지만 모두가 서로 다른 스타일을 가지고 얻을 ... 하나의 다른 쪽 메모. Checkbox 메서드 사용에 대한 혐오감이 생성 된 명명 체계와 관련이있는 경우 Mvc Framework에서이 기능에 액세스하는 방식은 다음과 같습니다. html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)
http://stackoverflow.com/questions/6590663/make-checkbox -disabled-in-asp-net-mvc-2-and-jquery하지만 CheckBoxFor 대신 EditorFor를 사용하려고합니다. –