【问题标题】:FindControl suddenly returning object reference error (ASP.NET/C#)FindControl 突然返回对象引用错误(ASP.NET/C#)
【发布时间】:2011-04-14 10:58:51
【问题描述】:

我的 Global.asax 文件中有以下代码:

System.Web.UI.Page webPage = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
string date = ((Literal)webPage.FindControl("ltlGenTime")).Text;

控件肯定存在于网页上,我已经通过检查webPage对象及其基类验证了这一点,它肯定是文字控件。 p>

现在我进行了一项更改,这似乎是造成这种情况的原因 - 我为我的所有页面创建了一个母版页。但我很困惑,因为 webPage 对象仍然列出了我需要的控件。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net findcontrol


    【解决方案1】:

    母版页修改了页面控件层次结构,所以首先需要从母版中找到内容占位符,然后定位到实际的控件——例如,

    Master.FindControl("YourContentPlaceholderId").FindControl("ControlName");
    

    请参阅this article 了解更多信息。

    【讨论】:

      【解决方案2】:

      您的ltlGenTime 控件在哪里?我猜它在主人身上。

      如果它在母版页上,那么您将需要使用

      string date = ((Literal)webPage.Master.FindControl("ltlGenTime")).Text;
      

      【讨论】:

        【解决方案3】:

        请注意,FindControl 不进行递归搜索。您可能必须找到它所在的适当容器。

        【讨论】:

          【解决方案4】:

          尝试使用我找到的这个递归 FindControl 函数here

          private Control FindControlRecursive(Control root, string id) 
          { 
              if (root.ID == id)
              { 
                  return root; 
              } 
          
              foreach (Control c in root.Controls) 
              { 
                  Control t = FindControlRecursive(c, id); 
                  if (t != null) 
                  { 
                      return t; 
                  } 
              } 
          
              return null; 
          } 
          

          【讨论】:

            猜你喜欢
            • 2013-09-20
            • 1970-01-01
            • 1970-01-01
            • 2015-06-12
            • 2012-11-21
            • 2012-10-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多