B
Benton
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}opUpCalendar runat=server></{0}opUpCalendar>"),
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; }
}
}
}
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}opUpCalendar runat=server></{0}opUpCalendar>"),
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; }
}
}
}