0

我有 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());
    }
}

我该怎么做才能使其相应地工作?

4

5 回答 5

0

尝试这个;

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

但请记住,@Cris 提出了一个问题。

于 2013-02-08T07:23:41.317 回答
0

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

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

于 2013-02-08T07:25:33.320 回答
0

这是一个示例http://dotnetstation.wordpress.com/adding-date-year-and-month-in-dropdownlist-using-aspnetc/

于 2013-02-08T07:28:04.393 回答
0

您应该利用框架的 DateTime 类从选定的年份和月份中获取所需的日期。

    //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
    }
于 2013-02-08T07:28:39.927 回答
0

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

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

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

$("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("");
  }
}
})

最后,正如 Cris 所说,您还需要检查日期是否有效,而不是 2 月 31 日。服务器端,我只会在日期上执行 Date.TryParse() 以检查它是否是实际日期,而不是表格发布时的其他内容......

于 2013-02-08T07:34:43.543 回答