답변:
Html.DisplayFor()
속성 유형과 일치하는 DisplayTemplate을 렌더링합니다.
찾을 수 없으면 호출한다고 가정합니다 .ToString()
.
디스플레이 템플릿에 대해 잘 모르면 DisplayTemplates
컨트롤러와 연결된보기 폴더 내의 폴더에 넣을 수있는 부분보기입니다 .
예:
다음 코드 를 사용하여 뷰 폴더 String.cshtml
의 DisplayTemplates
폴더 안에 이름이 지정된 뷰를 만드는 경우 (예 : Home
또는 Shared
) :
@model string
@if (string.IsNullOrEmpty(Model)) {
<strong>Null string</strong>
}
else {
@Model
}
그런 다음 문자열 @Html.DisplayFor(model => model.Title)
이라고 가정 Title
하면 템플릿을 사용 <strong>Null string</strong>
하여 문자열이 null이거나 비어있는 경우 표시 됩니다.
자신의 디스플레이 템플릿을 정의하거나 데이터 주석을 사용하면 주요 이점이 있다고 생각합니다.
예를 들어 제목이 날짜 인 경우
[DisplayFormat(DataFormatString = "{0:d}")]
그런 다음 모든 페이지에서 값을 일관된 방식으로 표시합니다. 그렇지 않으면 여러 페이지에서 디스플레이를 사용자 정의해야 할 수도 있습니다. 따라서 일반 문자열에는별로 도움이되지 않지만 통화, 날짜, 전자 메일, URL 등에 도움이됩니다.
예를 들어 이메일 주소가 일반 문자열이 아닌 링크로 표시 될 수 있습니다.
<a href="mailto:@ViewData.Model">@ViewData.TemplateInfo.FormattedModelValue</a>
DisplayFor
템플릿에 유용합니다. 모델의 템플릿을 작성하고 다음과 같이 할 수 있습니다.
@Html.DisplayFor(m => m)
와 유사합니다 @Html.EditorFor(m => m)
. DRY 프린시 펄에 유용하므로 동일한 모델에 대해 동일한 디스플레이 로직을 반복해서 쓸 필요가 없습니다.
MVC2 템플릿에 대한이 블로그를 살펴보십시오. 여전히 MVC3에 매우 적용 가능합니다.
http://www.dalsoft.co.uk/blog/index.php/2010/04/26/mvc-2-templates/
모델에 데이터 주석이있는 경우에도 유용합니다. 예를 들어 모델의 속성이 EmailAddress
데이터 주석으로 장식되어 있으면 링크 DisplayFor
로 렌더링됩니다 mailto:
.
@Html.DisplayFor(m => m)
또한 간단하게 단순화 할 수 있습니다 @Html.DisplayForModel()
.
얼마 동안 나 자신에 대한 답을 찾은 후에 뭔가를 찾을 수있었습니다. 일반적으로 하나의 속성에 사용하는 경우 생성 된 HTML의 "소스보기"를 수행해도 동일하게 나타납니다. 예를 들어, 클래스의 Name 속성 만 표시하려는 경우 HTML이 생성됩니다.
<td>
myClassNameProperty
</td>
<td>
myClassNameProperty, This is direct from Item
</td>
이것은 아래 코드에서 생성 된 HTML입니다.
<td>
@Html.DisplayFor(modelItem=>item.Genre.Name)
</td>
<td>
@item.Genre.Name, This is direct from Item
</td>
동시에이 경우 클래스 "장르"에 대한 하나의 문장으로 모든 속성을 표시하려면 @ Html.DisplayFor ()를 사용하여 입력을 저장할 수 있습니다.
다음과 같이 장르의 각 속성에 대해 별도의 문을 작성하는 대신 @ Html.DisplayFor (modelItem => item.Genre)을 쓸 수 있습니다
@item.Genre.Name
@item.Genre.Id
@item.Genre.Description
속성 수에 따라 달라집니다.