Can't find other Controls from my own Control

Discussion in 'ASP .Net Building Controls' started by Benton, Dec 4, 2006.

  1. Benton

    Benton Guest

    Hi there,

    I'm creating a "PopUpDatePicker" control, inheriting from Hyperlink. The
    goal is to click on that control, select a value from a Calendar and set
    this date value to a target control, usually a TextBox.

    Problem is on the OnPreRender event, where I try to find the target control.
    The FindControl() method always return null there, that is, the specified
    Target control is not found on the current page. Here's the event code:

    protected override void OnPreRender(EventArgs e)

    {

    System.Web.UI.Page page = System.Web.HttpContext.Current.Handler as
    System.Web.UI.Page;

    Control control = page.FindControl(TargetControl);

    if (control != null) // null is always returned here :(

    this.Attributes.Add("onclick",
    string.Format("window.open('DatePicker.aspx?field={0}', 'calendarPopup',
    'width=230,height=209,resizable=no,statusbar=no');", control.ClientID));

    base.OnPreRender(e);

    }

    And below is the full code-behind, too. The question is: Why is the
    FindControl() method returning null here? The TargetControl property does
    have the name of the target control on the page (I can see it with the VS
    debugger) so that is not the problem. So what am I missing?

    Thanks in advance,

    -Benton

    Full code-behind below:


    using System;
    using System.Drawing;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.ComponentModel;

    [assembly: TagPrefix("Tenerife.WebControls", "Tenerife")]

    namespace Tenerife.WebControls

    {

    [ToolboxData("<{0}:popUpCalendar runat=server></{0}:popUpCalendar>"),

    ToolboxBitmap(typeof(Calendar))]

    public class PopUpCalendar : HyperLink

    {

    public PopUpCalendar()

    {

    this.NavigateUrl = "javascript:;";

    this.ImageUrl = "~/img/SmallCalendar.gif";

    this.ToolTip = "Click to select date";

    }

    protected override void OnPreRender(EventArgs e)

    {

    System.Web.UI.Page page = System.Web.HttpContext.Current.Handler as
    System.Web.UI.Page;

    Control control = page.FindControl(TargetControl);

    if (control != null) // This is always false :(

    this.Attributes.Add("onclick",
    string.Format("window.open('DatePicker.aspx?field={0}', 'calendarPopup',
    'width=230,height=209,resizable=no,statusbar=no');", control.ClientID));

    base.OnPreRender(e);

    }

    [IDReferenceProperty(typeof(Control))]

    [Themeable(false)]

    [TypeConverter(typeof(System.Web.UI.WebControls.ValidatedControlConverter))]

    [DefaultValue("")]

    public string TargetControl

    {

    get { return ViewState["TargetControl"] == null ? String.Empty :
    ViewState["TargetControl"].ToString(); }

    set { ViewState["TargetControl"] = value; }

    }

    }

    }
    Benton, Dec 4, 2006
    #1
    1. Advertising

  2. Benton

    Benton Guest

    > I'm creating a "PopUpDatePicker" control, inheriting from Hyperlink. The
    > goal is to click on that control, select a value from a Calendar and set
    > this date value to a target control, usually a TextBox.


    Adding something to my own question here. I've modified my OnPreRender event
    to look like this:

    protected override void OnPreRender(EventArgs e)
    {

    Control control = Page.FindControl(TargetControl);


    this.Attributes.Add("onclick",
    string.Format("window.open('DatePicker.aspx?field={0}', 'calendarPopup',
    'width=230,height=209,resizable=no,statusbar=no');", control.ClientID));

    base.OnPreRender(e);

    }

    This time I am not casting the current page from the current handler, I'm
    just using the Page property the Hyperlink control inherited. However, the
    result is just the same: FindControl() always returns null. What am I doing
    wrong?

    Thanks in advance,

    -Benton
    Benton, Dec 4, 2006
    #2
    1. Advertising

  3. Benton

    Benton Guest

    >> I'm creating a "PopUpDatePicker" control, inheriting from Hyperlink. The
    >> goal is to click on that control, select a value from a Calendar and set
    >> this date value to a target control, usually a TextBox.

    >
    > This time I am not casting the current page from the current handler, I'm
    > just using the Page property the Hyperlink control inherited. However, the
    > result is just the same: FindControl() always returns null.


    Duh. Solved by using NamingContainer.FindControl() instead of
    Page.FindControl(). Long live GoogleGroups. :)

    Cheers,

    -Benton
    Benton, Dec 4, 2006
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Stefan Siegl
    Replies:
    1
    Views:
    758
  2. Paul J. Lucas
    Replies:
    3
    Views:
    582
    Paul J. Lucas
    Nov 30, 2005
  3. Saverio M.
    Replies:
    0
    Views:
    500
    Saverio M.
    Jul 3, 2006
  4. Nick Gilbert
    Replies:
    11
    Views:
    568
    Steven Cheng[MSFT]
    Jan 11, 2007
  5. David Filmer
    Replies:
    17
    Views:
    250
    J. Romano
    Aug 18, 2004
Loading...

Share This Page