none
请老师看下如何给Repeater 的项加 class="current"? RRS feed

  • 问题

  • <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" onitemdatabound="Repeater1_ItemDataBound">
    
      <ItemTemplate>
            <li><%# Eval("typeName") %></li>
      </ItemTemplate>
    
    </asp:Repeater>
    

    我想根据 Request.QueryString["typeName"] 的值在绑定数据时给li加个 class=" current" 属性 ,请问该怎么做呢?

    另外如果我把绑定代码写成下面这样的话
    <li runat="server" id="item"><%# Eval("typeName") %></li>

    在生成的HTML代码中会有很多像<li id="Repeater1_ctl04_item"  垃圾的HTML ID标记

    我不想生成垃圾的id 请老师帮我看下该怎么处理才能生成想下面这样的html代码
    <ul>
    <li>.....</li>
    <li class="current">.....</li>
    <li>.....</li>
    <li>.....</li>
    </ul>


    2009年8月13日 12:33

答案

  • 手动控制current是比较麻烦的一件事,这么多 li 只能有一个current,最好的解决办法是自己实现控件。
    我的一个项目是用如下方法解决的,希望对你有帮助:

    首先将参数在后台类型中公布为一个属性。比如:

    public string CurrentTypeName{
      get{return Request.QueryString["typeName"];}
    }
    然后,HTML代码这样写:

    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" onitemdatabound="Repeater1_ItemDataBound">
    
      <ItemTemplate>
            <li<%# ((YourListItemType)Container.DataItem).TypeName == this.CurrentTypeName ?? "class='current'" : "" %>><%# Eval("typeName") %></li>
      </ItemTemplate>
    
    </asp:Repeater>
    

    Facing problems, think first, then search, finally ask.
    2009年8月14日 0:26

全部回复

  • 你好,你的current值不会变化的,你直接<li class="current">不行吗?
    jon.valett@gmail.com
    2009年8月13日 16:38
    版主
  • 手动控制current是比较麻烦的一件事,这么多 li 只能有一个current,最好的解决办法是自己实现控件。
    我的一个项目是用如下方法解决的,希望对你有帮助:

    首先将参数在后台类型中公布为一个属性。比如:

    public string CurrentTypeName{
      get{return Request.QueryString["typeName"];}
    }
    然后,HTML代码这样写:

    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" onitemdatabound="Repeater1_ItemDataBound">
    
      <ItemTemplate>
            <li<%# ((YourListItemType)Container.DataItem).TypeName == this.CurrentTypeName ?? "class='current'" : "" %>><%# Eval("typeName") %></li>
      </ItemTemplate>
    
    </asp:Repeater>
    

    Facing problems, think first, then search, finally ask.
    2009年8月14日 0:26
  • 谢谢上面两位老师回复,很有帮助,我昨天又找到了些方法,麻烦看下是否适用
    1
      <
    ItemTemplate
    >
    
            <
    li 
    <asp:PlaceHolder ID="PlaceHolder1" runat="server" />>
    <%
    # Eval("typeName") %>
    </
    li
    >
    
    
      </
    ItemTemplate
    >
    
      .aspx.cs 
    PlaceHolder li = (PlaceHolder)e.Item.FindControl("PlaceHolder1");
    Literal classText = new Literal();
    classText.Text = "class=\"current\"";
    li.Controls.Add(classText);
    2
      <
    ItemTemplate
    >
    
      <
    li class="<%=CurrentStyle%>"
    >
    <%
    # Eval("typeName") %>
    </
    li
    >
    
    </ ItemTemplate >
    .aspx.cs
    public string controlStyle = "current";
    public string ControlStyle { get { return controlStyle; } private set { controlStyle = value; } }


    2009年8月14日 1:15
  • 这种办法也是可以的,你可以实际试试。
    Facing problems, think first, then search, finally ask.
    2009年8月14日 1:16