在我的转发器中,我有以下标记:
<asp:Repeater runat="server" id="TeamsRepeater" OnItemDataBound="TeamsRepeater_ItemDataBound" ClientIDMode="Predictable">
<ItemTemplate>
<tr runat="server" id="team">
<td><%# Container.ItemIndex + 1 %></td>
<td><%#Eval("PosChange")%></td>
<th><%# ((ITeam)Eval("MemberTeam")).Href()%></th>
<td><%#Eval("GamesAll")%></td>
<td><%#Eval("GameW")%></td>
<td><%#Eval("GameD")%></td>
<td><%#Eval("GameL")%></td>
<td><%#((ITournMember)Container.DataItem).Goals()%></td>
<td><%#Eval("Score")%></td>
</tr>
</ItemTemplate>
</asp:Repeater>
这是非常易读的(并且可以维护,如果你看到可以做得更好的话,请指出我。)
但我担心的是,为此标记生成的HTML代码包含大量空格......
我怎样才能按顺序加强:
答案 0 :(得分:3)
我不会牺牲可读性来摆脱空间。从长远来看,这会伤害到你。而是为您的动态内容启用压缩,即使用IIS HTTP Compression - 最终结果将是您的aspx页面上的动态gzip压缩,它比普通HTML小得多。
答案 1 :(得分:3)
答案 2 :(得分:2)
创建模块效果很好,但是如果您使用的更新面板和AJAX不起作用,因为AJAX请求会被响应的大小处理。当响应更改时,AJAX javascript失败。因此,我创建了一个Repeater控件,在发送之前修剪其响应:
<Assembly: TagPrefix("MyControls", "MyRepeater")>
''' <summary>
''' Summary description for MyRepeater.
''' </summary>
<ToolboxData("<{0}:MyRepeater runat=server></{0}:MyRepeater>")>
Public Class MyRepeater : Inherits Repeater
Protected Overrides Sub Render(writer As System.Web.UI.HtmlTextWriter)
Using htmlwriter As New HtmlTextWriter(New System.IO.StringWriter())
MyBase.Render(htmlwriter)
Dim html As String = htmlwriter.InnerWriter.ToString()
html = Regex.Replace(html, "(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}", String.Empty)
html = Regex.Replace(html, "[ \f\r\t\v]?([\n\xFE\xFF/{}[\];,<>*%&|^!~?:=])[\f\r\t\v]?", "$1")
html = html.Replace(";\n", ";")
writer.Write(html.Trim())
End Using
End Sub
End Class
然后在您的aspx页面上输入此内容以注册控件
<%@ Register TagPrefix="ccl" Assembly="MyControls" Namespace="MyControls" %>
答案 3 :(得分:0)
@Budda,可能是我的决定是愚蠢的,但它有效且可能是可读的:)
<table>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="CustomersSource">
<ItemTemplate><%# string.Format("<tr>{0}</tr>",
string.Format("<td>{0}</td>",
string.Join("</td><td>",
new[]
{
Eval("CustomerID"),
Eval("CompanyName")
}))) %></ItemTemplate>
</asp:Repeater>
</table>
如果将代码移动到辅助方法,我们将得到更优雅的决定:
public static class HtmlHelper
{
public static string TableRow(params string[] tdList)
{
return string.Format("<tr>{0}</tr>", string.Format("<td>{0}</td>", string.Join("</td><td>", tdList)));
}
}
<table>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="CustomersSource">
<ItemTemplate><%# HtmlHelper.TableRow(
Eval("CustomerID").ToString(),
Eval("CompanyName").ToString()) %></ItemTemplate>
</asp:Repeater>
</table>