在asp.net中禁用中继器的标签
本文关键字:中继器 标签 asp net | 更新日期: 2023-09-27 18:10:59
标记
<HeaderTemplate>
<table>
<tr>
<th>
<asp:Label ID="label12" runat="server" Text="Editor"></asp:Label>
</th>
</tr>
</HeaderTemplate>
代码隐藏
protected void ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Label label12 = (Label)e.Item.FindControl("label12");
Label activeLabel = (Label)e.Item.FindControl("lblEditor");
string s = activeLabel.Text;
if (s != "Sao Palo")
{
activeLabel.Visible = true;
label12.Visible = true;
}
else
{
activeLabel.Visible = false;
label12.Visible = false;
}
}
}
我在收到NullReferenceException
label12.visible=true;
这个标签在标题中,这就是为什么在中继器项中找不到它的原因。因此,将e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
更改为e.Item.ItemType == ListItemType.Header
。
protected void ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header)
{
Label label12 = (Label)e.Item.FindControl("label12");
// ...
}
}
但由于另一个标签不在hader中,而是在一个项目中,所以你需要一种不同的方法。您也可以通过Repeater.Controls[0].Controls[0].FindControl("label12");
获取标题标签。
所以这应该有效:
protected void ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Label label12 = (Label)((Repeater)sender).Controls[0].Controls[0].FindControl("label12");;
Label activeLabel = (Label)e.Item.FindControl("lblEditor");
string s = activeLabel.Text;
if (s != "Sao Palo")
{
activeLabel.Visible = true;
label12.Visible = true;
}
else
{
activeLabel.Visible = false;
label12.Visible = false;
}
}
}