FormView.FindControl()返回null直到DataBind()

时间:2010-01-31 11:08:28

标签: .net asp.net asp.net-2.0 formview findcontrol

为什么方法FindControl()在致电null之前会在FormView上返回DataBind()

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

有哪些解决方法?

在第一次调用DataBind()之前致电FindControl()

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

它与BINDING无关。一个是寻找服务器控制,而不是ITS绑定数据。 SO - 控制应该通过FindControl提供。原因是其他地方......

答案 3 :(得分:0)

这很奇怪。仅仅调用DataBind()对我不起作用。我必须创建一个新的List,添加一个项目,设置为datasource,然后设置databin。

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

答案 4 :(得分:0)

我所经历的就是这个,

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";
                }
            //}
        }