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代码包含大量的空间

我如何加强这一点,以便:

  • 从输出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" %>