我有一个网络user control
,其中包含三个dropdownlists
:一个持有数天,第二个持有数月,第三个持有数年。天和月是静态的。但是年份项目将根据需要改变,以避免进入错误的一年。让我先在这里列出我按顺序做的事情,然后我会问我的问题:
在私有方法PopulateYearList中我说:
int year = DateTime.Now.Year;
int span = year - this.yearSpan;
for (int i = span; i <= year; i++)
{
ddlYears.Items.Add(i.ToString());//Here I get NullReferenceException
}
我已经覆盖默认构造函数以接收yearSpan
作为参数:
public DatePicker(int yearSpan)
{
this.yearSpan = yearSpan;
this.PopulateYearList();
}
现在,正如您可能已经在PopulateYearList
方法中猜到的那样,我得到了NullReferenceException
,因为我尝试将项目添加到尚未构建的ddlYears
。你有什么建议来解决这个问题?
答案 0 :(得分:1)
不要在构造函数中调用this.PopulateYearList,而是在用户控件的Load事件上调用它。
此外,我更喜欢你不使用你的用户控件的构造函数,而是使用公共属性,因为它可以保持其状态。
e.g。在页面:
protected void Page_Load(object sender, EventArgs e)
{
UserControl1.TimeSpan = DateTime.Now.Year;
}
在UserControl中:
protected void Page_PreRender(object sender, EventArgs e)
{
if(this.IsPostBack)
{
PopulateYearList()
}
}
只要您不从父页面对该控件进行任何更改,加载控件后的任何事件,都可以调用this.PopulateYearList。我在PreRender事件中调用它,好像有人更改了页面中的值,它最后会被用户控件值覆盖,因此我确信我的值没有被调整。
如果我遗失了某些内容,请告诉我。
答案 1 :(得分:0)
以太网呼叫PopulateYearList
的{{1}}中的Page_Load
。像这样:
usercontrol
或者protected void Page_Load(object objSrc, EventArgs e)
{
if(this.IsPostBack)
PopulateYearList()
}
PopulateYearList
并在绑定public
控件
page
上调用它