C# Listview中带有的面板显示错误(对象引用未设置为对象的实例。)

C# Listview中带有的面板显示错误(对象引用未设置为对象的实例。),c#,asp.net,C#,Asp.net,我在列表视图的Itewmtemplate中有一个面板,它只应该在用户登录时显示,默认情况下可见性为false。谢谢你的帮助 这是我的c#代码: Aspx代码: <asp:Panel ID="pnlOptions" runat="server" Visible="false"> <ul> <ul> <li style="float: left">Option 1:</li> <

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

这是我的c#代码:

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>

      选项1:
    • 在此处下拉
    选项1:
  • 放在这里

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

  • 失败-如果未找到作为控件子项的项,则返回null

  • 查找“错误”对象,对
    (面板)
    的转换失败

  • 我建议将代码改写为:

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

    然后,您可以设置断点,并找出哪一行发生故障。

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

  • 失败-如果未找到作为控件子项的项,则返回null

  • 查找“错误”对象,对
    (面板)
    的转换失败

  • 我建议将代码改写为:

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

    然后,您可以设置断点,并找出哪一行在您身上出现故障。

    我的问题是,我试图通过一个函数错误地访问它,该函数是在我应该使用Item_created事件时创建的。下面是最后的工作代码:

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

    谢谢你,里德。

    我的问题是,当我应该使用Item_created事件时,我试图通过创建的函数错误地访问它。这里是最终的工作代码:

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

    这也适用于:

     foreach (var item in ListView1.Items)
      {
        Panel pnlOptions = (Panel)item.FindControl("pnlOptions");
        pnlOptions.Visible = true;
      }
    
    这也应该起作用:

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

    @fzshah76:检查面板的类型(在调试器中)-如果您按照上述方式重写,您应该能够准确地找出出现问题的原因,并且可以修复它,或者提供更多信息来帮助您。不,我认为这类似于网格视图类型。这里有另一个类似的问题@fzshah76:检查类型(在调试器中)如果你像上面那样重写,你应该能够准确地找出问题的原因,或者修复它,或者给我们更多的信息来帮助你。不,我认为这是类似于网格视图类型的东西,这里是另一个类似的问题