c# - ASP.NET - 在构造期间将项目添加到下拉列表

标签 c# asp.net constructor

我有一个 Web 用户控件,它包含三个 dropdownlists:一个包含天,第二个包含月,第三个包含年。日期和月份是固定的。但年份项目会根据需要更改,以避免输入错误的年份。让我先在这里按顺序列出我所做的事情,然后我会问我的问题:

  1. 我有一个 private int yearSpan。
  2. 在私有(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
    }
    
  3. 我已经覆盖默认构造函数以接收 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/

相关文章:

c# - 在 GoDaddy 服务器上发出请求之前,API 会停止工作

ASP.NET 5 - 使用配置设置

javascript - 构造函数方法无法访问 for 循环中子对象的嵌套属性

java - 构建我的 Java Swing 应用程序。 IE。何时何地使用类和不使用类

c# - SMTP 客户端在本地主机上发送消息失败,在远程主机上成功

c# - EF 代码优先的 RelationShip 错误

c# - 如何使用 LINQ 获取 XML 元素的位置(按顺序索引)?

c# - 我是否应该密封所有我知道不应该用作基类的类?

c# - 是否可以只在 ASP.Net 中处理 404 错误?

java - 如何构建泛型类和构造函数以使用泛型方法?