【问题标题】:Nullreference exception - why?空引用异常 - 为什么?
【发布时间】:2010-11-20 05:24:36
【问题描述】:
Panel pnl_Confirmation = (Panel)form1.FindControl("ConfirmationPanel") as Panel;
    pnl_Confirmation.Visible = false;

我在上面的代码中不断收到“NullReferenceException”。 “ConfirmationPanel”是我根据表单是否成功提交来显示/隐藏的面板。

面板被包裹在一个 LoginView 控件中,这就是为什么我不能直接调用“ConfirmationPanel”:

<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate> 
<asp:Panel id="ConfirmationPanel" runat="server" Wrap="False">

...

为什么这个是空的?它应该引用 ID 为“ConfirmationPanel”的面板,不是吗?

谢谢

【问题讨论】:

  • Panel pnl_Confirmation = (Panel)form1.FindControl("ConfirmationPanel") as Panel; 为什么要投射两次?
  • 这可能不是您想要的那种评论,但是有什么方法可以代替 MVC 工作吗? ASP.NET 网络表单是集中的邪恶。
  • 您不需要两种类型的类型转换:“as Panel”就足够了。
  • 是执行语句Panel pnl_Confirmation = (Panel)form1.FindControl("ConfirmationPanel") as Panel时第一次可见的面板; ?

标签: c# asp.net


【解决方案1】:

试试这个:

Panel pnl_Confirmation = LoginView1.FindControl("ConfirmationPanel") as Panel;
if(pnl_Confirmation != null)
   pnl_Confirmation.Visible = false;

【讨论】:

  • 这行得通。谢谢!看来我投了两次,以及从“form1”而不是“LoginView1”引用。
  • @Kolten - 是的。如果它解决了您的问题,请将其标记为答案。
【解决方案2】:

这完全取决于您在哪里拥有该代码。如果您在 Page_Load() 之前有它,则可能尚未构建控件树,因此为空引用。

【讨论】:

    【解决方案3】:

    改用LoginView的FindControl

    Panel pnl_Confirmation = LoginView1.FindControl("ConfirmationPanel") as Panel;
    

    因为它是 LoginView 模板的一部分。

    【讨论】:

      【解决方案4】:

      “仅当控件直接包含在指定容器中时,FindControl 才会找到控件;也就是说,该方法不会搜索控件内的控件层次结构。”(来自 MSDN 文档)

      即在 LoginView 上调用 FindControl 或创建递归 FindControl

      【讨论】:

        【解决方案5】:

        您似乎尝试了两次类型转换。

        尝试只进行一次类型转换,效果最好:

        Panel pnl_Confirmation = (Panel)form1.FindControl("ConfirmationPanel");
        

        Panel pnl_Confirmation = form1.FindControl("ConfirmationPanel") as Panel;
        

        在尝试访问之前验证您的引用是否不为空也很重要

        if (pnl_Confirmation != null)
            pnl_Confirmation.Visible = false;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-27
          • 2010-10-09
          相关资源
          最近更新 更多