간단한 모델이 있습니다.
public class MyViewModel {
public MyCustomType EmailAddress {get; set; }
}
특정보기에서이 속성을 편집 할 수 있도록 입력 상자를 표시해야합니다. 이상적으로는 표준 @Html.EditorFor
구문 을 계속 사용하고 싶어서 /Views/Shared/EditorTemplates/MyCustomType.cshtml
템플릿을 만들었습니다 .
@model MyNamespace.MyCustomType
@Html.TextBoxFor(m => m.SomeStringProperty, new { @class = "form-control" })
IModelBinder
이 입력을 MyCustomType
제출할 때 다시 읽는 사용자 지정도 있습니다 .이 모든 것이 잘 작동합니다.
그러나 속성 이름에서 알 수 있듯이이 속성에는 이메일 주소가 포함되어 있습니다. 표준 데이터 주석 속성을 사용하여 표시 한 다음 필요한 경우 입력 상자 MyCustomType.cshtml
를 렌더링하는 데 사용하도록 업데이트하고 싶습니다. <input type="email">
모든 용도 MyCustomType
가 이메일 주소 인 것은 아니므로 표준 속성을 사용하여 표시하고 싶습니다. 그 자체로. 그렇게 할 때 :
public class MyViewModel {
[EmailAddress]
public MyCustomType EmailAddress {get; set; }
}
내 사용자 지정 템플릿은 더 이상 사용되지 않습니다. 대신 표준 EditorFor
코드 를 사용하는 것으로 되돌아 가고 기본적 으로 특정 속성을 가져 오는 사용자 지정 편집기 템플릿이 아닌 내부 의 .ToString()
버전 만 표시합니다 .MyCustomType
<input>
표준 데이터 주석 속성을 추가하기 위해 모델 만 요구하면서 내 사용자 정의 편집기 템플릿 기능을 사용할 수있는 방법이 있습니까?
데이터 주석은 편집기 템플릿의 경우 항상 유형보다 우선합니다. 몇 가지 옵션이 있습니다.
사용자 지정 "EmailAddress"특성을 만듭니다. 기술적으로는 EmailAddressAttribute
실제로 추가하지 않고도 서브 클래스 만 할 수 있다고 생각합니다 . 그러나 사용자 정의 속성의 이름을 사용하면 다른 편집기 템플릿을 사용할 수 있습니다.
계속해서 EmailAddress.cshtml
편집기 템플릿을 사용 하되 내부로 분기하십시오. 다음 MyCustomType
에서 상속 한다고 가정합니다 String
.
@model String
@if (Model is MyCustomType)
{
...
}
else
{
...
}
하지만 가장 쉬운 방법은 템플릿을 지정하는 것입니다. 자동은 아니지만 추가 작업이 필요하지 않습니다.
@Html.EditorFor(m => m.EmailAddress, "MyCustomType")
그러면 MyCustomType.cshtml
기본값 대신 로드 됩니다 EmailAddress.cshtml
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다