2011-01-16 4 views
1

저는 MVC를 처음 사용합니다 ... 트랜잭션 목록을 보여주는 화면을 만들고 있습니다. 그래서, 제 컨트롤러에서리스트 <> TransactionLines를 만듭니다. 나는 그것을 내 견해로 전달한다. 내보기에는 다음과 같은 코드가 있습니다.ASP.Net MVC - 테이블 만들기

 <table width="1000" border="0" cellspacing="1" cellpadding="2"> 
     <tr class="headerRow"> 
      <td> 
       Transaction Date 
      </td> 
      <td> 
       Payee 
      </td> 
      <td align="right"> 
       Amount 
      </td> 
      <td> 
       Category 
      </td> 
      <td> 
       Cost Center 
      </td> 
      <td> 
       Budget Assignment 
      </td> 
      <td> 
      </td> 
     </tr> 
     <% 
      decimal runningTotal = 0; 
      int rowNum = 0; 


      foreach (var trans in Model) 
      { 
       rowNum++; 
       runningTotal += trans.TotalAmount; 

       if (trans.IsSplit == false) 
       { 
        foreach (var line in trans.Transactions) 
        {%> 
     <tr <% if(rowNum % 2 == 0) { %> class="alternateRow" <%}%>> 
      <td> 
       <%=trans.TransactionDate.ToShortDateString()%> 
      </td> 
<%--   <td> 
       <%=trans.IsCredit ? "CR" : "DR"%> 
      </td> 
--%>   <td> 
       <%=trans.Payee %> 
      </td> 
      <td align="right" <% if(trans.IsCredit==false) { %>class="debitCell" <% }%>> 
       <% =String.Format("{0:C2}", line.Amount)%> 
      </td> 
      <td> 
       <%=String.Format("{0} - {1}", line.Category, line.SubCategory)%> 
      </td> 
      <td> 
       <%=line.CostCenter%> 
      </td> 
      <td> 
       <%=line.Budget%> 
      </td> 
      <td> 
       <font color="gray"> 
        <%=String.Format("{0:C2}", runningTotal)%></font> 
      </td> 
     </tr> 
     <% 
} 
       } 
       else 
       { %> 
     <tr <% if(rowNum % 2 == 0) { %> class="alternateRow" <%}%>> 
      <td> 
       <%=trans.TransactionDate.ToShortDateString()%> 
      </td> 
<%--   <td> 
       <%=trans.IsCredit ? "CR" : "DR"%> 
      </td> 
--%>   <td> 
       <%=trans.Payee %> 
      </td> 
      <td align="right"> 
       <%=String.Format("{0:C2}", trans.TotalAmount)%> 
      </td> 
      <td> 
       <%=trans.Transactions[0].Category + " ...[More]" %> 
      </td> 
      <td> 
       <%=trans.Transactions[0].CostCenter + "...[More]" %> 
      </td> 
      <td> 
      </td> 
      <td> 
       <font color="gray"> 
        <%=String.Format("{0:C2}", runningTotal)%></font> 
      </td> 
     </tr> 
     <%} 
      }%> 
     <tr> 
      <td colspan="3" align="right"> 
       <strong> 
        <%=runningTotal.ToString("C2") %></strong> 
      </td> 
     </tr> 
    </table> 

이제는 더러워 보일 수도 있고 디버그 할 수도없는 악몽입니다. 또한, 나는 그 두 배를 따르기가 어려울 새로운 요구 조건을 가지고있다.

더 좋은 방법이 있나요?

+1

프로젝트에 너무 가깝지 않은 경우에는 Razor보기 엔진을 사용하는 것이 좋습니다. 구문이 훨씬 깔끔합니다. 또한 컨트롤러에서 텍스트 출력을 준비하고 HTML 도우미를 사용하여 간단한보기 모델을 전달하여보기에 간단한 논리를 캡슐화하십시오. – JcMaltaDev

답변

3

뷰 모델을 생성하십시오. 보기에 TransactionLines 목록을 전달하지 말고 대신 TransactionDisplayLine 클래스를 작성하고 해당 목록을보기에 전달하십시오.

컨트롤러에서 TransactionLines를 반복하고 각 항목에 대해 TransactionDisplayLine을 만듭니다.

  • trans.IsCredit 실행 :

    TransactionDisplayLine이 같은 것들을 포함해야합니까? "CR": "DR"< - 문자열로이 결과

  • 및 String.format ("{0} C2"line.Amount) < - 이미 포맷 문자열
같은 양

그러면보기 자체가 줄을 방출하지만 데이터에 대한 더 이상의 결정/논리를 작성하지 않는 아주 단순한 foreach-loop가됩니다.

컨트롤러에 TransactionDisplayLines가 만들어지기 때문에 디버깅이 쉬워집니다.

당신도 거기에 짝수/홀수 행 순환 장치가 있다는 것을 눈치 챘는데, 이는 상황을 더욱 복잡하게 만듭니다. the one from Phil Haack과 같은 HTML 도우미에 넣으십시오.

이 추악한 물건 :

<tr <% if(rowNum % 2 == 0) { %> class="alternateRow" <%}%>> 

<tr class="<%: Html.Cycle("alternateRow","") %>"> 

하게하고 ROWNUM도 사라졌다.

+0

Thanks Michael. 나는 그런 식으로 임 플레멘 트하려고합니다. 감사. – Craig

관련 문제