FormView.FindControl() returns null until DataBind()

后端 未结 5 2005
轻奢々
轻奢々 2020-12-19 23:24

Why method FindControl() returns null on FormView until call DataBind().

After that it returns everything correct

相关标签:
5条回答
  • 2020-12-19 23:47

    Either explicitly call DataBind(), or place your code in the DataBound event of the FormView.

    0 讨论(0)
  • 2020-12-19 23:53

    what I experienced is this,

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

    returned null.

    So, I did this:

     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";
                    }
                //}
            } 
    
    0 讨论(0)
  • 2020-12-19 23:58

    It is very odd. Did not work for me just calling DataBind(). I had to create a new List, add an item, set as datasource, then databin.

    List<Item> dummyList = new List<Item>();
    dummyList.Add(new Item());
    formview.DataSource = dummyList;
    formview.DataBind();
    
    0 讨论(0)
  • 2020-12-20 00:05

    How would a FormView have any information about its content before it has any data to build it upon?

    So I guess you already answered your own question, you will have to DataBind() before.

    0 讨论(0)
  • 2020-12-20 00:14

    It has nothing to do with BINDING. One is looking for SERVER CONTROL, not for ITS BOUND DATA. SO - control should be available via FindControl. The reason is somewhere else...

    0 讨论(0)
提交回复
热议问题