FormView.FindControl() 在 DataBind() 之前返回 null

Posted

技术标签:

【中文标题】FormView.FindControl() 在 DataBind() 之前返回 null【英文标题】:FormView.FindControl() returns null until DataBind() 【发布时间】:2011-01-11 09:38:06 【问题描述】:

为什么方法FindControl()FormView 上返回null 直到调用DataBind()

之后它会正确返回所有内容吗?

有什么解决方法?

在第一次拨打FindControl()之前先拨打DataBind()

【问题讨论】:

【参考方案1】:

要么显式调用 DataBind(),要么将代码放在 FormView 的 DataBound 事件中。

【讨论】:

【参考方案2】:

FormView 在有任何数据可以构建它之前如何获得有关其内容的任何信息?

所以我猜你已经回答了你自己的问题,你必须先DataBind()

【讨论】:

如果 DataBound() 函数中的控件在数据绑定发生后才可用,如何访问该控件?我在 OnDataBound 回调中,但 FindControl 返回 null。【参考方案3】:

它与 BINDING 无关。一个是寻找服务器控制,而不是它的绑定数据。 SO - 控制应该可以通过 FindControl 获得。原因在别的地方……

【讨论】:

这确实是 FormView.NamingContainer 的众所周知的行为。【参考方案4】:

这很奇怪。仅调用 DataBind() 对我不起作用。我必须创建一个新列表,添加一个项目,设置为数据源,然后是数据仓。

List<Item> dummyList = new List<Item>();
dummyList.Add(new Item());
formview.DataSource = dummyList;
formview.DataBind();

【讨论】:

【参考方案5】:

我的经历是这样的,

System.Web.UI.htmlControls.HtmlImage bookmarkload = sessionDetail.FindControl("bookmarkimage") as System.Web.UI.HtmlControls.HtmlImage;

返回null

所以,我这样做了:

 protected void sessionDetail_DataBound(object sender, EventArgs e)
        
            LoadBookmarkImage();
        
  private void LoadBookmarkImage()
        
            //if (_swapDetails != null)
            //             
                try
                
                    _currnetSession = new SessionBL(_user);

                    List<SessionVO> _tmp = null;
                    string sample = Convert.ToString(Page.RouteData.Values["sessionCode"]);
                    if (Session["Prefernce"] != null)
                    
                        _tmp = (List<SessionVO>)Session["Prefernce"];
                    
                    if (_tmp != null && _tmp.Count > 0)
                    
                        _tmp = _tmp.Where(p => p.SessionCode == sample).ToList();
                    

                    //_currentFavorite.SessionD = _swapDetails[0];
                    _currentFavorite.SessionD = _tmp[0];

                    List<FavoriteVO> _swapList = _user.ViewFavoriteONID(_currentFavorite.SessionD.SessionID);

                    if (_swapList != null && _swapList.Count > 0)
                    
                        //access javascript counter variable
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "", "counter=1;", true);
                        System.Web.UI.HtmlControls.HtmlImage bookmarkload = sessionDetail.FindControl("bookmarkimage") as System.Web.UI.HtmlControls.HtmlImage;
                        bookmarkload.Src = "/Images/heart-checked.png";
                    
                
                catch (Exception ex)
                
                    labelinfo.Visible = true;
                    labelinfo.InnerHtml = ex.Message;
                    labelinfo.Attributes["class"] = "centering text-center text-danger";
                
            //
         

【讨论】:

以上是关于FormView.FindControl() 在 DataBind() 之前返回 null的主要内容,如果未能解决你的问题,请参考以下文章

在 javascript 中查找控件

分配的变量引用在哪里,在堆栈中还是在堆中?

NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?