gpt4 book ai didi

c# - 需要帮助使用 C# FindControl

转载 作者:行者123 更新时间:2023-11-30 22:44:38 26 4
gpt4 key购买 nike

我在面板内有一个中继器。
在这个中继器内我有另一个面板。在某些情况下,我想设置这个 panel.visibility = false

在后面的代码中,我尝试在 OnItemDataBound 上找到面板并设置 visible=false。但它只返回 未设置为对象实例的对象引用。。我猜是因为它找不到面板。

这是我的代码:

    <asp:Panel ID="Panel1" runat="server">
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="repComments_OnDataBound">
<ItemTemplate>
<div>
<asp:Panel runat="server" ID="commentAdminPanel" CssClass="floatRight" >
<img id='deleteComment' class='deleteComment' src='/img/delete1.jpg' />
</asp:Panel>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
</asp:Panel>

下面是我的代码:

    protected void repComments_OnDataBound(Object sender, RepeaterItemEventArgs e)
{
Panel panel = (Panel)Repeater1.FindControl("commentAdminPanel");
panel.Visible = false;
}

我做错了什么?

最佳答案

一个问题是您直接调用中继器,而不是绑定(bind)项模板 - e.Item.FindControl 而不是 Repeater1.FindControl

另一个问题是 ItemDataBound 事件也会针对页眉和页脚触发,并且您没有检查您在转发器中的列表项类型(ListItemType 枚举)。

由于您没有 header 项(这将是第一个调用处理程序的项),因此没有面板控件并且转换失败。

您只需要 ItemAlternatingItem 项目类型:

protected void repComments_OnDataBound(Object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
{
Panel panel = (Panel)e.Item.FindControl("commentAdminPanel");
panel.Visible = false;
}
}

关于c# - 需要帮助使用 C# FindControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3350841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com