在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;

在asp.net中禁用中继器的标签

这个标签在标题中,这就是为什么在中继器项中找不到它的原因。因此,将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;   
        }
    }
}