2012-10-02 7 views
0

나는 테이블을 유지하기위한 것입니다 모델을 만드는 오전. 테이블은 런타임에 정의 된 임의의 수의 행을 보유합니다. MVC에서 이것을 정의하는 쉬운 방법이 있는지 궁금합니다.내 모델로 행의 임의의 수의 테이블을 만들기?

는 현재 내가 가진 전부입니다

다른 모델에서
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CableSolve.Web.Models.Orders.ActivityDetailsModel>" %> 

<div id="ActivityDisplay"> 
    <table id="ActivitiesGrid"> 
    </table> 
    <div id="ActivitiesGridPager"></div> 
</div> 

, I 행의 정적 수를 가진 테이블을 만듭니다. 이 꽤 쉬웠다 :

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CableSolve.Web.Models.Orders.OrderDetailsModel>" %> 

<fieldset class="collapsible"> 
    <legend> 
     <%= Html.DisplayFor(model => model.OrderDetailsLegendName)%> 
    </legend> 
    <table id="OrderDetailsContentTable" class="ContentTable"> 
     <tr> 
      <td><%= Html.DisplayFor(model => model.OrderID.Name)%></td> 
      <td><%= Html.DisplayFor(model => model.OrderID.Value)%></td> 

      <td><%= Html.DisplayFor(model => model.Comment.Name)%></td> 
      <td><%= Html.DisplayFor(model => model.Comment.Value)%></td> 
     </tr> 
     ... 

그래서, ActivitiesGrid 행의 임의의 수를하는 것에 대한 갈 수있는 방법에 대한 아이디어?

은 기본적으로 내 컨트롤러는 런타임에서 몇 가지 정보를 얻을 것입니다 나는 테이블에서 검색된 정보를 표시 할,하지만 난받을려고 얼마나 많은 정보의 행 모른다.

타사 물건을 도입하지 않고 가벼운 솔루션으로

(지금은 그것이 필요한 증명 내가 가만히 있으면) :

public class ActivityDetailsModel 
{ 
    public List<ActivityRow> ActivityRows = new List<ActivityRow>(); 

    public struct ActivityRow 
    { 
     public DateTime? Date; 
     public string Person; 
     public string OrderOrTaskID; 
     public string Activity; 

     public ActivityRow(DateTime? date, string person, string orderOrTaskID, string activity) 
     { 
      Date = date; 
      Person = person; 
      OrderOrTaskID = orderOrTaskID; 
      Activity = activity; 
     } 
    } 

    public ActivityDetailsModel(IEnumerable<Activity> activities) 
    { 
     foreach(Activity activity in activities) 
     { 
      string orderOrTaskID = activity.TaskID != 0 
            ? activity.OrderID + "-" + activity.TaskID 
            : activity.OrderID.ToString(); 

      string activityDescription = string.Format("OldValue: {0}, NewValue: {1}", activity.OldValue, 
                 activity.NewValue); 

      ActivityRows.Add(new ActivityRow(activity.UpdateDateTime, activity.UpdateUsername, orderOrTaskID, activityDescription)); 
     } 
    } 
} 

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CableSolve.Web.Models.Orders.ActivityDetailsModel>" %> 

<div id="ActivityDisplay"> 
    <table id="ActivitiesGrid"> 
     <%foreach (var activityRow in Model.ActivityRows) 
      {%> 
      <tr> 
       <td><%= Html.DisplayForModel(activityRow.Date)%></td> 
       <td><%= Html.DisplayForModel(activityRow.Person)%></td> 
       <td><%= Html.DisplayForModel(activityRow.OrderOrTaskID)%></td> 
       <td><%= Html.DisplayForModel(activityRow.Activity)%></td> 
      </tr> 
      <%}%> 
    </table> 
    <div id="ActivitiesGridPager"></div> 
</div> 

이 상대적으로 이해할 수 있습니까? 나는 모든 각도 브래킷과 퍼센트 기호와 마크 업을 싫어하지만,이 프로젝트는 다른 구문으로 개발되지 않았습니다.

+0

가변적 인 테이블 행이 어떤 종류의 열거 가능한 객체에 있다고 가정하면 for 루프 내에 HTML 테이블 행을 생성하지 않는 이유가 무엇일까요? – Chris

+0

예 : 난 그냥 모델의 내부 for 루프를 사용하는 방법을 배웠 D. 나는 그것을 시도하면서 편집 할 것이고 나는 무섭게 맹공격을 저지른 것인지 볼 것입니다. –

답변

1

역동적 인 작업을 수행 중이므로 MVC WebGrid helper 또는 MvcContrib Grid과 같은 기존 도우미를 활용할 수 있습니다. 이러한 도우미는 원하는 열을 포함하는 테이블을 생성합니다. 이 동적 데이터 소스에 존재하는 객체의 수에 따라 런타임시 생성 될 것이기 때문에 손으로 테이블을 쓸 필요가 없습니다.

관련 문제