M
MC
I'm getting the following error messages when I view my
ComposisteControl in design time mode.
"Error Rendering Control - <My Control Name>"
"An unhandled exception has occurred
Object reference not set to an instance of an object"
The Control is as follows: -
public class TrackedAd : CompositeControl
{
public SqlDataSource sdsAds = new SqlDataSource();
public System.Web.UI.WebControls.AdRotator adRot = new
System.Web.UI.WebControls.AdRotator();
private string _Target = "_blank";
private int _SponsorId = -1;
[Description("The Browser Target for the Attribute"),
TypeConverterAttribute(typeof(TargetConverter))]
public string Target
{
get { return _Target; }
set { _Target = value; }
}
public int SponsorId
{
get { return _SponsorId; }
set { _SponsorId = value; }
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
Page.RegisterRequiresControlState(this);
}
protected override object SaveControlState()
{
object[] state = { base.SaveControlState(), _Target,
_SponsorId };
return state;
}
protected override void LoadControlState(object state)
{
if (state != null)
{
object[] stateTmp = (object[])state;
base.LoadControlState(stateTmp[0]);
_Target = (string)stateTmp[1];
_SponsorId = (int)stateTmp[2];
}
}
protected override void CreateChildControls()
{
sdsAds.ConnectionString =
ConfigurationManager.ConnectionStrings["RedsSponsors"].ConnectionString;
sdsAds.ProviderName =
ConfigurationManager.ConnectionStrings["RedsSponsors"].ProviderName;
sdsAds.SelectCommand = string.Format("SELECT
'{0}'+iif(ImageName<>null,ImageName,'../transp.gif') AS ImageUrl,
CompanyName AS AlternateText, URL AS NavigateUrl, Impressions, Clicks
FROM Sponsors WHERE Id={1}", Utils.SponsorsImageBase, SponsorId);
sdsAds.ID = "sdsAds";
adRot.AdCreated += new AdCreatedEventHandler(this_AdCreated);
adRot.DataSourceID = "sdsAds";
adRot.Target = Target;
Controls.Add(sdsAds);
Controls.Add(adRot);
}
protected void this_AdCreated(object sender, AdCreatedEventArgs e)
{
SponsorsUtils.IncrementAdvertStat("CompanyName",
"Impressions", e.AlternateText);
if (e.NavigateUrl != "")
{
e.NavigateUrl =
string.Format("~/Adverts/AdvertHandler.ashx?Url={0}",
Page.Server.UrlEncode(e.NavigateUrl));
}
}
}
What is wrong? I thought by using compositecontrol I would not have to
worry about designtime?
ComposisteControl in design time mode.
"Error Rendering Control - <My Control Name>"
"An unhandled exception has occurred
Object reference not set to an instance of an object"
The Control is as follows: -
public class TrackedAd : CompositeControl
{
public SqlDataSource sdsAds = new SqlDataSource();
public System.Web.UI.WebControls.AdRotator adRot = new
System.Web.UI.WebControls.AdRotator();
private string _Target = "_blank";
private int _SponsorId = -1;
[Description("The Browser Target for the Attribute"),
TypeConverterAttribute(typeof(TargetConverter))]
public string Target
{
get { return _Target; }
set { _Target = value; }
}
public int SponsorId
{
get { return _SponsorId; }
set { _SponsorId = value; }
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
Page.RegisterRequiresControlState(this);
}
protected override object SaveControlState()
{
object[] state = { base.SaveControlState(), _Target,
_SponsorId };
return state;
}
protected override void LoadControlState(object state)
{
if (state != null)
{
object[] stateTmp = (object[])state;
base.LoadControlState(stateTmp[0]);
_Target = (string)stateTmp[1];
_SponsorId = (int)stateTmp[2];
}
}
protected override void CreateChildControls()
{
sdsAds.ConnectionString =
ConfigurationManager.ConnectionStrings["RedsSponsors"].ConnectionString;
sdsAds.ProviderName =
ConfigurationManager.ConnectionStrings["RedsSponsors"].ProviderName;
sdsAds.SelectCommand = string.Format("SELECT
'{0}'+iif(ImageName<>null,ImageName,'../transp.gif') AS ImageUrl,
CompanyName AS AlternateText, URL AS NavigateUrl, Impressions, Clicks
FROM Sponsors WHERE Id={1}", Utils.SponsorsImageBase, SponsorId);
sdsAds.ID = "sdsAds";
adRot.AdCreated += new AdCreatedEventHandler(this_AdCreated);
adRot.DataSourceID = "sdsAds";
adRot.Target = Target;
Controls.Add(sdsAds);
Controls.Add(adRot);
}
protected void this_AdCreated(object sender, AdCreatedEventArgs e)
{
SponsorsUtils.IncrementAdvertStat("CompanyName",
"Impressions", e.AlternateText);
if (e.NavigateUrl != "")
{
e.NavigateUrl =
string.Format("~/Adverts/AdvertHandler.ashx?Url={0}",
Page.Server.UrlEncode(e.NavigateUrl));
}
}
}
What is wrong? I thought by using compositecontrol I would not have to
worry about designtime?