编写ASP.NET的月份和年份下拉列表的最佳方法是什么?

Bry*_*ein 12 c# vb.net asp.net webforms

我有一个内部应用程序,我需要有两个日期类型元素的下拉列表: .这些值不在数据库或其他信息库中.

我知道我可以通过将它们添加到像对象这样的字典中来设置一个包含我需要的值的列表(我需要将Month与数值表示相关联,January => 01):

var months = new Dictionary<String,String>();
months.Add("01", "January");
...
Run Code Online (Sandbox Code Playgroud)

今年的下拉列表将更容易,因为我可以选择一个起始年份并在通用列表中迭代到当前或当前+ 1年.

有没有更好的方法来处理这些数据元素?内置的东西,或者我应该实现的良好设计模式?

Jab*_*Jab 30

您可以使用它来获取所有Month名称的列表并循环遍历它.

CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
Run Code Online (Sandbox Code Playgroud)

您可以像这样使用它...使用Month的索引作为下拉列表的值

var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
for (int i = 0; i < months.Length; i++)
{
     ddl.Items.Add(new ListItem(months[i], i.ToString()));
}
Run Code Online (Sandbox Code Playgroud)


Cyb*_*ist 5

扩展@Jesse Brown的答案...

通过使用System.Globalization指令,我具有以下代码:

for (int x = 0; x < 12; x++)
{
    cboMonth.Items.Add
    (
       (x+1).ToString("00") 
       + " " 
       + CultureInfo.CurrentCulture.DateTimeFormat.MonthNames.GetValue(x)
     );
}
Run Code Online (Sandbox Code Playgroud)

这将产生一个下拉列表,如下所示:

1月1日2月3日... 12月12日

进一步的改进可能是通过添加以下内容使显示的月份成为当前月份:

cboMonth.Text = DateTime.Now.Month.ToString("00") 
   + " " 
   + CultureInfo.CurrentCulture.DateTimeFormat.MonthNames.GetValue(DateTime.Now.Month);
Run Code Online (Sandbox Code Playgroud)

在for循环之后。