Listview中的Panel给出了一个错误(对象引用未设置为对象的实例。)

时间:2010-06-24 18:29:31

标签: c# asp.net

我在列表视图的Itewmtemplate中有一个面板,它只应该在用户登录时显示,默认情况下visibility = false。感谢帮助。

这是我的c#代码:

    Panel pnlOptions = (Panel)ListView1.FindControl("pnlOptions");
    pnlOptions.Visible = true;

Aspx代码:

<asp:Panel ID="pnlOptions" runat="server" Visible="false">
    <ul>
        <ul>
        <li style="float: left">Option 1:</li>
        <li style="float: left">dropdown here</li>
        </ul>
    <li style="float: left">Option 1:</li>
    <li style="float: left">dropdwon here</li>
    </ul>

    </asp:Panel>

3 个答案:

答案 0 :(得分:1)

您收到错误是因为FindControl调用是:

  1. 失败 - 如果未找到该项作为控件的子项,FindControl将返回null。

  2. 查找“错误”对象,并且(Panel)的强制转换失败。

  3. 我建议将代码重写为:

    Control control = ListView1.FindControl("pnlOptions");
    Panel pnlOptions = control as Panel;
    pnlOptions.Visible = true;
    

    然后,您可以设置断点,并找出哪些线路失败。

答案 1 :(得分:0)

我的问题是我试图通过我创建的函数错误地访问它,因为我应该使用Item Created Event这里是最终的工作代码:

protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e)
{
    Control control = e.Item.FindControl("pnlOptions");
    Panel pnlOptions = control as Panel;
    pnlOptions.Visible = true;
}

谢谢里德。

答案 2 :(得分:0)

这也应该有效:

 foreach (var item in ListView1.Items)
  {
    Panel pnlOptions = (Panel)item.FindControl("pnlOptions");
    pnlOptions.Visible = true;
  }