我的意思是,现在我们已经尽可能地使用现代模板引擎将你的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();
%>
他认为这很棒,我认为这很难看,所以我想知道更多人的意见。
答案 0 :(得分:5)
对于设计师而言,它在代码可读性方面倒退了一步,这里没有两个意见。
从开发人员的角度来看,这将取决于。有些人喜欢别人没有。我个人喜欢它,而不是更标准的foreach
技术。为什么?
您从一个简单的<table>
和一个foreach
开始。然后一些用户说你需要处理交替的行样式。首先添加ifs
。然后另一个用户说您需要能够按给定列进行排序。你用另一个ifs
处理这个问题。第三个用户要求您处理paging =&gt;您视图中的另一个ifs
和foreach
。最终得到spaghetti。
结论:使用合适的枪用于正确的目标。对于简单的表格,传统的方法效果很好,但是一旦你开始做更高级的东西就会使用助手。
答案 1 :(得分:2)
MVC Contrib Grid看起来很吓人,因为它有大量的能力。它是一个瑞士军队级HTML扩展,为所有人做所有事情。正如其他人所说,手工制作更难或更笨拙。我记得回到桌面上,编写同样笨拙的代码来配置网格和电子表格控件以获得正确的效果。
但是,如果您的需求更为温和,那就写下自己的需求。菲尔·哈克(Phil Haack)在code based repeater上写了一篇很棒的文章。还有一些较轻的Grid View Helpers可以帮助你。这些并不强大,但可能更适合您应用程序中的某些作业。
答案 2 :(得分:1)
<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>
而且我很确定我也错过了一些东西。传统上,我必须跟踪行数或某种方式来知道它是否是一个交替的行,有一个我没有记录的情况,并且通常有很多<% %>
标记来处理这些代码块
答案 3 :(得分: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();
%>