如何在数据库中为单独的日期月份输入有效日期

时间:2013-11-22 09:39:51

标签: c# asp.net

我的项目中有一个注册表,我使用三个下拉列表输入日,月和年。在此日期,通过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";
    }
}

所有其他月份的方法相同。但我不认为这是解决这个问题的正确方法。有没有人有任何建议?

3 个答案:

答案 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...
}