我有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());
}
}
我可以做些什么来使其有效?
答案 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)
以下是您http://dotnetstation.wordpress.com/adding-date-year-and-month-in-dropdownlist-using-aspnetc/
的示例答案 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()来检查它是否是一个实际的日期而不是表格被发布时的东西...