根据下拉列表中选择的月份和年份填充日期

时间:2013-02-08 07:15:11

标签: c# asp.net date drop-down-menu

我有3个下拉列表,分别为年,月和日期。 现在我想根据用户选择的年份和月份填充我的日期。我想使用普通的下拉列表来尝试它,所以我暂时排除了日期时间选择器的选项。

这是我正常用来填充值的代码:

 protected void Call_Date()
{
    for (int i = 1; i <= 31; i++)
    {
        date0.Items.Add(i.ToString());

    }

    for (int j = 1; j <= 12; j++)
    {
        month0.Items.Add(j.ToString());

    }

    for (int k = DateTime.Now.Year; k <= 2020; k++)
    {
        year0.Items.Add(k.ToString());
    }
}

我可以做些什么来使其有效?

5 个答案:

答案 0 :(得分:0)

试试这个;

DateTime myDate = new DateTime((int)year0.SelectedValue,(int)month0.SelectedValue,(int)date0.SelectedValue)  

但请记住@Cris有一个问题。

答案 1 :(得分:0)

您可以使用DateTime.IsLeapYear方法检查年份是否跳跃。如果您不想使用DateTime函数,那么您可以像this一样计算闰年。一旦找到,就很容易找到一个月内的天数。

一月31, 2月28/29(闰年), 3月31日, 4月30日, 5月31日, 6月30日 7月31日, 8月31日, 9月30日, 10月31日, 11月30日, 12月31日

答案 2 :(得分:0)

答案 3 :(得分:0)

您应该利用框架的DateTime类来从所选的Year和Month中获取所需的日期。

    //build a date for the month and year selected by the user
    DateTime newDate = new DateTime(yearSelected, monthSelected, 1);

    //iterate through the days in that month
    for (int i = newDate.Day; i < DateTime.DaysInMonth(newDate.Year, newDate.Month); i++ )
    {
        //add to your list
    }

答案 4 :(得分:0)

不确定客户端解决方案是否合适,但看起来您可以将Knockout用作一个选项...它看起来像这个例子:http://knockoutjs.com/examples/cartEditor.html,取决于第一个下拉列表(月份),您可以填充下一个(日期)并使其与有效天数匹配,以便您可以生成有效日期......

话虽如此,我最近为出生日期字段制作了一个编辑模板......它与您的设置大致相同,有三个下拉菜单。它还有一个隐藏字段(实际日期),使用Javascript设置,每当三个下拉框中的一个更改时运行。然后它尝试设置隐藏字段的值并在字段上运行Unobtrusive Validation以检查有效日期,如果没有则显示错误消息...

检查编辑器模板中下拉列表的伪代码在这里:

$("Dropdown").change(function () {
 if (($("Year").val() != "") && ($("Day").val() != "") && ($("Month").val() != "")) {
   var date = new Date($("Year").val(), $("Month").val() - 1, $("Day").val())
    $("Hidden").val(date.toString("yyyy-MM-dd"));

    $('form').validate().element('Hidden');
  } else {
   $("Hidden").val("");
  }
}
})

最后,正如克里斯所说,你还需要检查有效日期的日期,而不是2月31日。 Serverside,我会在日期做一个Date.TryParse()来检查它是否是一个实际的日期而不是表格被发布时的东西...