0

我有 3 个投递箱,分别对应日、月和年。在用户选择一个日期后,我连接 3 个字符串并将其传递给数据库。

我的问题是如何在将日期传递给数据库之前以交互方式验证日期。过滤掉不存在的无效日期,如 6 月 31 日或 2 月 30 日?

我想到了比较验证器。我要做的是创建 2 个隐藏文本框,用原始用户输入字符串填充一个,另一个用转换为日期的用户输入字符串填充(如果日期无效,系统应将其转换为我认为最接近的可能)。

比我使用 CompareValidator 比较那些文本框,如果它们不匹配,则会提示错误。但是不知何故它不起作用。有没有人知道为什么。或者也许有人知道不太复杂的技术来检查来自投递箱的日期?

将不胜感激任何意见或建议。

前端代码:

<asp:DropDownList ID="Dates" runat="server" >
<asp:ListItem></asp:ListItem>
<asp:ListItem>01</asp:ListItem>
<asp:ListItem>02</asp:ListItem>
 <asp:ListItem>03</asp:ListItem>
.......
 <asp:ListItem>29</asp:ListItem>
<asp:ListItem>30</asp:ListItem>
 <asp:ListItem>31</asp:ListItem>
</asp:DropDownList>&nbsp;

<asp:DropDownList ID="Monthes" runat="server" >
<asp:ListItem></asp:ListItem>
<asp:ListItem>January</asp:ListItem>
                          .......
<asp:ListItem>December</asp:ListItem>
</asp:DropDownList>
&nbsp;

<asp:DropDownList ID="years" runat="server">
 <asp:ListItem></asp:ListItem>
</asp:DropDownList>

<asp:TextBox ID="UserInput" runat="server"></asp:TextBox>
<asp:TextBox ID="ConvertedInput" runat="server"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" class="errorMess" runat="server" 
    ControlToCompare="UserInput" ControlToValidate="ConvertedInput" 
    ErrorMessage="Invalid Date"></asp:CompareValidator>

后端代码:

If Not Page.IsPostBack Then
        For count As Integer = 0 To 60
            years.Items.Add(CurYear - count)
        Next
    End If
    ConvertedInput.Visible = False
    UserInput.Visible = False


    .....

    Bday = years.Text & "-" & Monthes.Text & "-" & Dates.Text
    Dim TempDate As Date = CDate(Bday)
    Dim ConvDate As String = TempDate.ToString("yyyy-MM-dd")
    UserInput.Text = Bday
    ConvertedInput.Text = ConvDate
4

1 回答 1

0

您可以使用 a customvalidator,构建日期并验证它是有效日期。但是,我建议使用直接文本框并使用 jquery-ui 之类的 UI 库将文本框转换为日期选择器。然后,您可以使用DateTime.TryParse()将日期从后面代码中的文本框中拉出。

最大的优点是只需要处理单个输入,无需字符串连接/格式化。

于 2013-05-07T19:52:28.967 回答