2013-10-24 4 views
3

보기로 전달할 항목 목록이 있습니다. 표시 템플릿을 사용하여 각 항목을 렌더링하고 싶습니다. 그러나 필드가 올바르게 렌더링되지 않기 때문에 무언가 잘못되었습니다.MVC 면도기 표시 템플릿

@model IEnumerable<CustomEntity> 

@{ 
    ViewBag.Title = "Index"; 
} 
@Html.DisplayFor(m=>m) 

가 여기 내 디스플레이 템플릿입니다 :

@model CustomEntity 
<div> 
    @Html.LabelFor(m=>m.Name): 
    <strong>@Model.Name</strong> 
    @Html.LabelFor(m=>m.Icon): 
    <strong>@Model.Icon</strong> 
    @Html.LabelFor(m=>m.TypeName): 
    <strong>@Model.TypeName</strong> 
</div> 

페이지가로드,하지만 개체의 값을 표시하지 않습니다 은 여기 내 기본보기 (Index.cshtml)입니다.

답변

6
@model IEnumerable<CustomEntity> 

@{ 
    ViewBag.Title = "Index"; 
} 
@Html.DisplayForModel() 

다음 표시 템플릿이 ~/Views/Shared/DisplayTemplates/CustomEntity.cshtml에 저장되어 있는지 확인하십시오. 표시 템플릿의 위치와 이름은 매우 중요합니다. 형식 (CustomEntity.cshtml)과 같은 방식이어야하며 ~/Views/Shared/DisplayTemplates 중 하나에 있어야하며 ~/Views/XXX/DisplayTemplates에서 재정의 할 수도 있습니다. 여기서 XXX은 기본보기를 렌더링 한 컨트롤러입니다.

+0

'CustomEntity' 대신'IEnumerable '를 모델로 사용하여 DisplayTemplate을 검색하지 않습니까? –

+0

대린 감사합니다! 내 디스플레이 템플릿의 올바른 이름이 누락되었습니다. CustomEntity 대신 Entity라고 불렀습니다. 이름을 변경하고 나면 작동합니다. @ Html.DisplayForModel()과 @ Html.DisplayFor (m => m)의 차이점을 알려주시겠습니까? – laconicdev

+0

@ RédaMattar, 아니오, IEnumerable 을 디스플레이 또는 에디터 템플릿에 속성으로 전달하면 TModel.cshtml이라는 이름의 템플릿을 찾고이 컬렉션의 각 요소에 대해 자동으로 호출하여 코드에서'foreach' 루프를 작성할 필요가 없습니다. 그것은 모두 대회에 의해 작동합니다. –

0

IEnumerable<CustomEntity> 유형의 Html.DisplayFor으로 전달한 데이터의 디스플레이 템플릿은 CustomEntity이어야합니다. 대신 다음을 시도해보십시오 :

@model IEnumerable<CustomEntity> 

@{ 
    ViewBag.Title = "Index"; 
} 

@foreach(var customEntity in Model) 
{ 
    @Html.DisplayFor(m => customEntity); 
} 
+0

foreach 루프가 필요하지 않습니다. MVC는 다른 모든 것이 맞으면 관례에 따라 처리합니다. – Carl