ASP.Net MVC - Создание таблицы - PullRequest
1 голос
/ 16 января 2011

Я новичок в MVC .. Я строю экран, который показывает список транзакций.Итак, в моем контроллере я строю List <> TransactionLines.Затем я передаю это на мой взгляд.Мой взгляд тогда имеет код, подобный этому:

     <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 Ответ

3 голосов
/ 16 января 2011

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

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

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

  • Итого
  • trans.IsCredit? "CR": "DR" <- Результат этого в виде строки </li>
  • String.Format ("{0: C2}", line.Amount) <- Сумма в виде отформатированной строки уже </li>

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

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

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

Это ужасные вещи:

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

затем становится

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

и ваш rowNum также исчез.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...