C# 如何优化中继器空白
在我的中继器中,我有以下标记:C# 如何优化中继器空白,c#,asp.net,repeater,C#,Asp.net,Repeater,在我的中继器中,我有以下标记: <asp:Repeater runat="server" id="TeamsRepeater" OnItemDataBound="TeamsRepeater_ItemDataBound" ClientIDMode="Predictable"> <ItemTemplate> <tr runat="server" id="team"> <td>
<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代码包含大量的空间
我如何加强这一点,以便:
我不会为了去掉空格而牺牲可读性。从长远来看,这会伤害你。相反,为您的动态内容启用压缩,即-最终结果将是在您的aspx页面上进行动态gzip压缩,该页面比普通HTML页面小得多。@Budda,可能是我的决定很愚蠢,但它可以工作,而且可能可读:)
如果将代码移动到帮助器方法,我们将得到更优雅的决策:
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)));
}
}
公共静态类HtmlHelper
{
公共静态字符串TableRow(参数字符串[]tdList)
{
返回string.Format(“{0}”,string.Format(“{0}”,string.Join(“,tdList));
}
}
您可以试试这个。创建一个模块效果很好,但是如果您使用的是更新面板和AJAX,那么这将不起作用,因为AJAX请求是根据响应的大小来处理的。当响应被更改时,AJAX javascript将失败。因此,我创建了一个中继器控件,该控件在将响应发送回之前对其进行修剪:
<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
'''
''MyRepeater的摘要说明。
'''
公共类MyRepeater:继承Repeater
受保护的覆盖子呈现(编写器为System.Web.UI.HtmlTextWriter)
将htmlwriter用作新的HtmlTextWriter(New System.IO.StringWriter())
MyBase.Render(htmlwriter)
Dim html As String=htmlwriter.InnerWriter.ToString()
html=Regex.Replace(html,“(?我知道这可能很难看,但您可以通过简单地执行get{return propertyName.Trim();}来在属性getter上实现这一点。如果这是您关心的问题,您不必牺牲标记的可读性,这可能是一个有趣的想法,但不……不可能。
<table>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="CustomersSource">
<ItemTemplate><%# HtmlHelper.TableRow(
Eval("CustomerID").ToString(),
Eval("CompanyName").ToString()) %></ItemTemplate>
</asp:Repeater>
</table>
<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
<%@ Register TagPrefix="ccl" Assembly="MyControls" Namespace="MyControls" %>