6

我的意思是,现在我们已经采取了所有这些措施,尽可能使用现代模板引擎将您的 html 标记与代码分离(在过去,程序员通常只是在 php 中保持连接字符串,这很糟糕。)

然后我查看了一个同事生成 html 表的代码,它看起来像:

<% Html.Grid(Model).Columns(column => {
    column.For(x => Html.ActionLink("Edit", "Edit", new { id = x.Id })).Attributes(width => "30px").DoNotEncode();
    column.For(x => Html.ActionLink("Delete", "Delete", new { id = x.Id }, new { @class = "delete" })).Attributes(width => "95px").DoNotEncode();
    column.For(x => x.Id).Named("Code");
    column.For(x => x.Name).Named("Name").HeaderAttributes(align => "left");
    column.For(x => x.CPF).Named("CPF");
})
.Attributes(width => "100%", border => "0", cellpadding => "0", cellspacing => "0", @class => "data-table")
.Empty("No users found!")
.RowStart(row => string.Format("<tr class='row{0}'>", row.IsAlternate ? "-alternating" : ""))
.Render();
%>

他觉得好看,我觉得挺丑的,想知道更多人的看法。

4

4 回答 4

5

对于设计师来说,这是代码可读性的倒退,这里没有两种意见。

从开发人员的角度来看,这将取决于。有些人喜欢,有些人不喜欢。foreach与更标准的技术相比,我个人喜欢它并且更喜欢它。为什么?

你从一个简单的<table>和一个foreach. 然后一些用户说你需要处理交替的行样式。您首先添加ifs. 然后另一个用户说您需要能够按给定列排序。你用另一个来处理这个ifs。第三个用户要求您处理分页 => 另一个ifs并且foreach在您的视图中。你最终得到意大利面条

结论:为正确的目标使用正确的枪。对于简单的表格,传统的方法效果很好,但是一旦你开始做更高级的东西,就使用助手。

于 2010-06-22T20:51:44.270 回答
2

MVC Contrib Grid 看起来很吓人,只是因为它有大量的功能。它是一个为所有人做所有事情的瑞士军队级 HTML 扩展。正如其他人指出的那样,手工操作更加困难或笨拙。我记得回到桌面,编写同样笨拙的代码来配置网格和电子表格控件以获得正确的效果。

但是,如果您的需求比较适中,请编写您自己的。Phil Haack 有一篇关于基于代码的中继器的精彩文章。还有一些更轻的Grid View Helpers可以帮助你。这些并没有那么强大,但可能更适合您应用程序中的某些工作。

于 2010-06-22T21:29:14.380 回答
1

我同意它不是很漂亮,但是如果您开始定义表格外观的约定,您可以开始重构扩展方法来清理它。然后它甚至会干掉你的表定义。这是一个示例(减去实际的扩展方法)。

<% Html.Grid(Model).Columns(column => {
    InsertEdit(column).Width(30);
    InsertDelete(column).Width(95);
    column.For(x => x.Id).Named("Code");
    column.For(x => x.Name).Named("Name").LeftAlignHeader();
    column.For(x => x.CPF).Named("CPF");
})
.ApplyDefaultStyle()
.Class("data-table")
.Empty("No users found!")
.DefaultAlternatingStyle()
.Render();
%>
于 2010-06-22T20:51:33.767 回答
1

乍一看很难看,但我认为它相当简洁,并且处理了很多逻辑。例如,一个标准的 MVC 输出来做一些接近这个的事情(没有标记)

    <table>
    <% dim index as integer = 0
      if model.count > 0 then %>
       <tr>
        <th>Edit</th>
        <th>Delete</th>
        <th>Code</th>
        <th align="left">Name</th>
        <th>CFP</th>
       for each item in model
         if index mod 2 = 0 then%>
           <tr>
         <%else%>
           <tr class ="alternate">
         <%end if%>
           <td><%= html.actionLink("Edit", "Edit", New With {.id = item.id})%></td>
           <td><%= html.actionLink("Delete", "Delete", New With {.id = item.id})%></td>
           <td><%: item.id%></td>
           <td><%: item.Name%></td>
           <td><%: item.CPF%></td>
         <% index += 1
            Next%>
    <%Else%>
        <tr><td>No Rows Found</td></tr>
    <%end if%>

</table>

而且我很确定我也错过了一些东西。传统的,我必须跟踪行数或以某种方式知道它是否是交替行,当我没有记录并且通常有很多<% %>标签来处理这些代码块时。

于 2010-06-22T20:40:59.843 回答