2011-01-17 6 views
1
public class Person 
{ 
    public string First { get; set; } 
    public string Last { get; set; } 
    public int Age { get; set; } 
    public IEnumerable<Child> Children { get; set; } 
} 

public class Child 
{ 
    public string First { get; set; } 
    public string Last { get; set; } 
    public int Age { get; set; } 
} 

IEnumerable<Person> 인 내 모델에서 테이블을 렌더링하는 방법을 찾고 있습니다. 다음 표를 생성하려고합니다.ASP.NET MVC 표/표

<table> 
    <tr class="person"> 
     <td>First 1</td> 
     <td>Last 1</td> 
     <td>1</td> 
    </tr> 
    <tr class="child"> 
     <td>First 1</td> 
     <td>Last 1</td> 
     <td>1</td> 
    </tr> 
    <tr class="child"> 
     <td>First 2</td> 
     <td>Last 2</td> 
     <td>2</td> 
    </tr> 
    ... 
    ... 
</table> 

각 사람은 행이고 각 자식은 사람 행 아래의 개별 행이됩니다. 이것은 각 사람마다 IEnumerable<Person>에서 반복됩니다.

이와 같은 표를 생성하는 격자 또는 구성 요소가 있습니까? MvcContrib's grid component을 찾았지만 이러한 하위 행을 생성 할 수없는 것으로 보입니다. MvcContrib의 그리드를 확장하는 방법이 있나요?

답변

3

출력물에 테이블이 필요하다면 중첩 된 루프만큼 단순한 작업을 수행 할 수 있습니까?

<table> 
<% foreach (Person person in Model) 
    { %> 

    <tr class="person"> 
    <td><%: person.First %></td> 
    <td><%: person.Last %></td> 
    <td><%: person.Age %></td> 
    </tr> 

    <% foreach (Child child in person.Children) { %> 

    <tr class="child"> 
    <td><%: child.First %></td> 
    <td><%: child.Last %></td> 
    <td><%: child.Age %></td> 
    </tr> 

    <%} %> 

<%} %> 
</table> 
+0

이 중첩 유형은 웹 사이트의 많은 페이지에서 사용됩니다. 그들은 모두 같은 스타일/클래스를 사용하지만 모델은 각 페이지마다 약간 씩 다릅니다. 이 모든 HTML을 복사/붙여 넣기를 피하고 열 머리글 등을 변경하려고합니다. – nivlam

3

나는 그들을 모두 IPerson에서 구현하고 강하게을 통해 다음 IPerson 루프에 입력 된 DisplayTemplate를 만들고 부를 것이다 그것은

public interface IPerson 
{ 
    string First { get; set; } 
    string Last { get; set; } 
    int Age { get; set; } 
} 

<%@ Control Language="C#" Inherits="ViewUserControl<IPerson>" %> 

<tr class="<%=Model.GetType().Name.ToLower() %>"> 
    <td><%: Model.First %></td> 
    <td><%: Model.Last %></td> 
    <td><%: Model.Age %></td> 
</tr> 

<table> 
<% foreach (Person person in Model) { %> 
    <%=Html.DisplayFor(m => person, "IPersonRow") %> 
    <% foreach (Child child in person.Children) { %> 
    <%=Html.DisplayFor(m => child, "IPersonRow") %> 
    <% } %> 
<% } %> 
</table> 
+0

나쁜 예를 사용했을 수 있습니다. 'Person' 클래스와'Child' 클래스는 반드시 같은 속성을 가질 필요는 없습니다. 그들은 완전히 다른 것일 수 있습니다. 이 중첩 유형은 웹 사이트의 많은 페이지에서 사용됩니다. 그들은 모두 같은 스타일/클래스를 사용하지만 모델은 각 페이지마다 약간 씩 다릅니다. – nivlam

+0

여전히 나쁜 패턴이 아니라 ... 필요한 각 유형의 행에 대해 DisplayTemplate을 만들고 쉽게 연결할 수 있습니다. – hunter

0

그 좋은 Questio 엔!! 우리는 다음과 같은 작업을 수행 할 수

부모 자녀 부모 1 자녀 1, 자식 2 상위 2 자녀 3

예라면,

는, 부모에 대한 모든 차일을 인쇄하는 사용자 정의 컨트롤을 만들기 위해이 컨트롤을 사용 하위 열을 렌더링합니다.

다른 검색어가 있으면 알려주세요.

함께 배우기