2011-01-16 2 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> 

Теперь, что может выглядеть неаккуратно, и это кошмар для отладки. Кроме того, у меня есть новое требование о том, что будет делать doubley трудно следовать.

Есть ли лучший способ сделать это?

+1

Я бы порекомендовал вам использовать механизм просмотра Razor, если вы не слишком далеко от вашего проекта - синтаксис намного чище. Также рассмотрите вопрос о подготовке текстового вывода в вашем контроллере и пропустите простую модель просмотра, возможно, используя HTML-помощники, чтобы инкапсулировать некоторые из более простой логики в вашем представлении ... – JcMaltaDev

ответ

3

Создать вид модели. НЕ пересылайте List TransactionLines в представление, вместо этого создайте класс TransactionDisplayLine и передайте список этого представления.

В вашем контроллере проведите через свои транзакции и создайте TransactionDisplayLine для каждого элемента.

TransactionDisplayLine должен содержать такие вещи:

  • Запуск Всего
  • trans.IsCredit? "CR": "ДР" < - В результате этого в виде строки
  • String.Format ("{0: C2}", line.Amount) < - сумма как отформатированную строку уже

Тогда сам вид просто становится очень простой петлей foreach, которая испускает линии, но не делает никаких дальнейших решений/логики о данных.

Поскольку TransactionDisplayLines создаются в контроллере, отладка становится легкой.

Я заметил, что у вас есть четный/нечетный рядовой велосипед, что еще больше усложняет ситуацию. Попробуйте поместить это в HTML-помощник, например the one from Phil Haack.

Это некрасиво материал:

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

становится

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

и ваш RowNum ушел, а также.

+0

Спасибо Майкл. Я собираюсь объяснить это. Благодарю. – Craig

Смежные вопросы