@ Html.DisplayFor 구문은 무엇입니까?


223

Razor에서 @Html은 링크, 입력 등을위한 HTML 생성과 같은 여러 가지 깔끔한 작업을 수행합니다.

그러나 DisplayFor 함수를 얻지 못했습니다 ...

내가 쓰는 이유는 무엇입니까?

@Html.DisplayFor(model => model.Title)

내가 쓸 수있을 때 :

@Model.Title

답변:


217

Html.DisplayFor() 속성 유형과 일치하는 DisplayTemplate을 렌더링합니다.

찾을 수 없으면 호출한다고 가정합니다 .ToString().


디스플레이 템플릿에 대해 잘 모르면 DisplayTemplates컨트롤러와 연결된보기 폴더 내의 폴더에 넣을 수있는 부분보기입니다 .


예:

다음 코드 를 사용하여 뷰 폴더 String.cshtmlDisplayTemplates폴더 안에 이름이 지정된 뷰를 만드는 경우 (예 : 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이거나 비어있는 경우 표시 됩니다.


6
대부분의 경우 프리미티브 유형에 DisplayFor를 사용하는 것은 무의미합니다. 예를 들어 DateTime은 시간 부분이 쓸모없는 경우에도 날짜 / 시간을 표시합니다. 모델의 속성에 DateTime 형식에 "{0 : d}"형식 문자열을 지정할 수 있으면 DisplayFor가 더 유용 할 수 있습니다.
enorl76

6
@ enorl76 할 수 있습니다. Daveo의 답변을 참조하십시오 .
Bertrand Marron

3
DateTime 데이터 유형의 jQuery 날짜 선택기를 EditorFor 템플리트에 추가하여 항상 날짜 선택기를 양식으로 표시 할 수 있습니다.
Zachary Scott

4
일반적으로 사용하는 것은 과도하게 엔지니어링 된 것처럼 보이지만 특정 모델 속성에 대한 출력 형식을 지정할 때 사용해야합니다. 유용한 질문과 답변 감사합니다. 모든 라운드 +1.
로빈 윈 슬로우

이름이 같은 모델이 두 개인 경우 어떻게됩니까?
halivingston

77

자신의 디스플레이 템플릿을 정의하거나 데이터 주석을 사용하면 주요 이점이 있다고 생각합니다.

예를 들어 제목이 날짜 인 경우

[DisplayFormat(DataFormatString = "{0:d}")]

그런 다음 모든 페이지에서 값을 일관된 방식으로 표시합니다. 그렇지 않으면 여러 페이지에서 디스플레이를 사용자 정의해야 할 수도 있습니다. 따라서 일반 문자열에는별로 도움이되지 않지만 통화, 날짜, 전자 메일, URL 등에 도움이됩니다.

예를 들어 이메일 주소가 일반 문자열이 아닌 링크로 표시 될 수 있습니다.

<a href="mailto:@ViewData.Model">@ViewData.TemplateInfo.FormattedModelValue</a>

28

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:.


8
@Html.DisplayFor(m => m)또한 간단하게 단순화 할 수 있습니다 @Html.DisplayForModel().
Brant Bobby

라마 표현이란 무엇입니까 (m => m)? 첫 번째 m은 무엇입니까?
Arcadian

1
첫 번째 m 매개 변수의 이름입니다
Sinaesthetic

1
@ magic-c0d3r 첫 번째 m은 페이지의 Model 객체입니다. 이것이 labmda 표현에 사용 된 것입니다
Don Cheadle

4

얼마 동안 나 자신에 대한 답을 찾은 후에 뭔가를 찾을 수있었습니다. 일반적으로 하나의 속성에 사용하는 경우 생성 된 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

속성 수에 따라 달라집니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.