在代码后面的转发器内添加类到锚标签

时间:2010-10-25 04:31:01

标签: c# asp.net css

aspx文件

<ul>
                        <asp:Repeater runat="server" ID="rpt1" OnItemDataBound="rpt1_ItemDataBound">
                            <HeaderTemplate>
                                <li><a id="a1" href="javascript:void(0);" runat="server">Text</a></li>
                            </HeaderTemplate>
                            <ItemTemplate>
                                <li><a id="name" runat="server" href="javascript:void(0);">
                                    <%# Eval("Name").ToString() %></a>
                                    <asp:Label runat="server" ID="lblID" Visible="false" Text='<%#Eval("ID") %>'></asp:Label>
                        </li>
                            </ItemTemplate>
                        </asp:Repeater>
                    </ul>

现在这个转发器的ItemTemplate中有五个项目。我想要的是将每个锚标签的类设置为“mySprite id1,mySprite id2,mySprite id3等等。”

为此我在代码背后做了这个...

for (int i = 1; i < 6; i++)
                {
                    Name.Attributes.Add("class", "sprite id" + i);
                }

现在,当我查看页面源代码时,所有我的锚标记都被设置为class =“sprite id5”

我做错了什么? Plz help..thnx

2 个答案:

答案 0 :(得分:2)

OnItemDataBound事件处理程序中尝试这样的事情:

protected void rpt1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
    {
        HtmlAnchor nameAnchor = (HtmlAnchor)e.Item.FindControl("name");
        nameAnchor.Attributes.Add("class", "sprite id" + (e.Item.ItemIndex + 1));
    }
}

答案 1 :(得分:1)

for循环结束时,Name的值为“id5”。首先计算代码隐藏中的for循环,然后将结束值“id5”绑定到转发器(5次)。

由于<asp:Repeater>旨在显示来自DataSource的数据,因此您可以添加类名“id1,id2,id3,id4,id5等”。到数据的每一行,并将该字段绑定到类名。

或者,除非您使用GUID,否则您可以Concat()将表格的id字段设为“id”