我正在尝试更改位于Asp.net RepeaterItem
内的跨度的CSS类。 span
元素内部还有其他标签(单选按钮)。
标记与此类似:
<asp:Repeater>
<ItemTemplate>
<span class="spanClass" runat="server">
<label>
<asp:RadioButton id="rbID">
</asp:RadioButton>
</label>
</span>
</ItemTemplate>
</asp:Repeater>
我可以使用以下内容编辑单选按钮:
rb = (RadioButton)(repeaterItem.FindControl("rbID");
rb.Checked = true;
//this works
但是,当使用类似的代码来抓取span
时,它会失败并显示InnerHtml exception
,因为span
不是文字控件:
span = (GenericHtmlControl)(repeaterItem.FindControl("spanID");
span.Attributes.Add("class", "ClassToAdd");
//this fails
我已经完成的阅读说明了这种情况,因为span
不是文字控件,因为它内部有其他服务器控件(单选按钮)。
有没有办法访问相关<span>
的属性?
答案 0 :(得分:5)
像这样更改span
:
<span id="spanID" runat="server">
然后在你的代码后面:
protected void myRep_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item)
{
HtmlGenericControl x = (HtmlGenericControl)e.Item.FindControl("spanID");
x.Attributes["class"] = "myClass";
}
}
答案 1 :(得分:1)
您可以将一个名为“ClassToAdd”的字段添加到绑定到转发器的集合中。然后只需使用Eval即可显示它。 (例如,如果要将转发器绑定到DataTable,则可以添加一个名为ClassToAdd的新列,并在后面的代码中正确设置值。)
<asp:Repeater>
<ItemTemplate>
<span class="<%#Eval("ClassToAdd")%>">
</span>
</ItemTemplate>
</asp:Repeater>