我的项目中有一个注册表,我使用三个下拉列表输入日,月和年。在此日期,通过codebehind方法添加到下拉列表中:
private void Add_Date()
{
ddl_dat.Items.Add(new ListItem("-Date-", "-1"));
for (int j = 0; j < 31; j++)
{
var newOption = new ListItem("" + (j + 1).ToString(), j.ToString());
ddl_dat.Items.Add(newOption);
}
}
我在月份下拉列表中手动添加了12个月。我希望用户不能进入29个月或31个月。 我在提交表单之前通过检查来完成此操作:
if (ddl_year.SelectedIndex != -1 && ddl_dat.SelectedIndex != -1 && ddl_mon.SelectedIndex != 0)
{
if (ddl_mon.SelectedIndex == 2 && ddl_dat.SelectedIndex >= 28)
{
lbl_alert.Text = Convert.ToInt32(ddl_dat.SelectedValue)+ 1 + " Febuary Doesn't Exist";
}
}
所有其他月份的方法相同。但我不认为这是解决这个问题的正确方法。有没有人有任何建议?
答案 0 :(得分:2)
由于这是ASP.NET,您可以使用UpdatePanel
通过AJAX动态填充Date组合框的内容。然后,您可以使用DateTime.DaysInMonth()
查找一个月中的确切天数。您应该在月份和年份下拉列表SelectedIndexChanged
上更新日期组合框。这样,您的用户将无法在第一时间选择不正确的日期,因此无需处理任何错误。
或者,JQuery中提供了Javascript日历,可以让您的生活更轻松。
答案 1 :(得分:2)
在提交表格之前应用此检查:
string str = ddl_dat.SelectedValue + "/" + ddl_mon.SelectedValue + "/"
+ ddl_year.SelectedValue;
DateTime dt;
if(!DateTime.TryParse(str, out dt))
// Invalid date - Show error
else
// Use date from dt here
如果日期无效TryParse
将返回false。否则,您可以使用dt
变量的结果日期进行进一步操作。
答案 2 :(得分:1)
DateTime.TryParse可以帮到你。
DateTime dateValue;
string dateString = ddl_year.SelectedValue + "-" + ddl_mon.SelectedValue + "-" + ddl_dat.SelectedValue;
if (! DateTime.TryParse(dateString, out dateValue)) {
//Error...
}