我有一个 Web 用户控件
,它包含三个 dropdownlists
:一个包含天,第二个包含月,第三个包含年。日期和月份是固定的。但年份项目会根据需要更改,以避免输入错误的年份。让我先在这里按顺序列出我所做的事情,然后我会问我的问题:
- 我有一个 private int yearSpan。
在私有(private)方法 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
添加一个尚未出现的项目尚未建成。您建议如何解决这个问题?
最佳答案
不要在构造函数中调用 this.PopulateYearList,而是在用户控件的 Load 事件中调用它。
此外,我更希望您不要使用用户控件的构造函数,而是使用公共(public)属性,因为它可以维护其状态。
例如在页面中:
protected void Page_Load(object sender, EventArgs e)
{
UserControl1.TimeSpan = DateTime.Now.Year;
}
在用户控件中:
protected void Page_PreRender(object sender, EventArgs e)
{
if(this.IsPostBack)
{
PopulateYearList()
}
}
只要您不从父页面对该控件进行任何更改,您的控件加载后的任何事件,您都可以调用 this.PopulateYearList。我在 PreRender 事件中调用它,就好像有人更改了页面中的值一样,最后它会被用户控件值覆盖,因此我确信我的值没有受到影响。
如果我遗漏了什么,请告诉我。
关于c# - ASP.NET - 在构造期间将项目添加到下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10084083/