You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何校验Telerik RadDatePicker的无效日期输入?

Telerik RadDatePicker 合法日期校验实现

问题场景

页面中放置2个Telerik RadDatePicker控件和1个搜索按钮,相关代码如下:

<table class="moss2Search">
    <tr>
        <td>
            <div runat="server">
                <telerik:RadDatePicker RenderMode="Lightweight" ID="RadDatePicker1" width="100%"  runat="server" DateInput-Label="Boarding Start Date">
                </telerik:RadDatePicker>
             </div>
        </td>
        <td>
            <div runat="server">
                <telerik:RadDatePicker RenderMode="Lightweight" ID="RadDatePicker2" width="100%"  runat="server" DateInput-Label="Boarding End Date">
                </telerik:RadDatePicker>
            </div>
        </td>
        <td>
            <div> 
              <asp:CheckBox ID="chkMerActive" runat="server" Checked="true"/>Active
            </div>
        </td>
        <td>
            <%--<asp:Button ID="btnSeacrh" runat="server" Text="Search" OnClick="btnSearch_Click" OnClientClick="return dateValidation();"/> <br />--%>
            <telerik:RadButton RenderMode="Lightweight" runat="server" Text="Search" ID="Button1" OnClick="btnSearch_Click" OnClientClicked="validateDates" AutoPostBack="false"></telerik:RadButton>
        </td>
    </tr>
</table>

用户可在控件输入框手动键入非日期类字符串,需要校验两个控件的输入/选中值为合法有效日期。

实现方案

采用客户端前置校验+服务端兜底校验的双层方案,覆盖所有输入场景,避免非法值提交到后端。

1. 客户端校验逻辑(绑定按钮的validateDates事件)

RadDatePicker客户端实例提供get_selectedDate()方法,输入非法日期时该方法返回空值,可直接用于判断,代码如下:

function validateDates(sender, args) {
    // 获取两个日期选择器实例
    const startPicker = $find("<%= RadDatePicker1.ClientID %>");
    const endPicker = $find("<%= RadDatePicker2.ClientID %>");
    const startDate = startPicker.get_selectedDate();
    const endDate = endPicker.get_selectedDate();

    // 校验日期合法性
    if (!startDate) {
        alert("请输入有效的登机开始日期");
        startPicker.focus();
        args.set_cancel(true);
        return;
    }
    if (!endDate) {
        alert("请输入有效的登机结束日期");
        endPicker.focus();
        args.set_cancel(true);
        return;
    }

    // 可选逻辑:校验开始日期不晚于结束日期
    if (startDate.getTime() > endDate.getTime()) {
        alert("开始日期不能晚于结束日期");
        args.set_cancel(true);
        return;
    }

    // 校验通过,手动触发后端提交
    sender.click();
}

2. 控件内置属性配置(减少自定义校验代码)

可直接利用控件原生能力降低非法输入概率:

  • 配置DateInput-DateFormat属性指定输入格式,比如yyyy-MM-dd,控件会自动拦截不符合格式的输入
  • 配置MinDate、MaxDate限定合理日期范围,避免输入超出业务边界的日期
  • 可搭配ASP.NET原生校验控件做无JS兜底的静态校验,示例:
<asp:CompareValidator runat="server" 
    ControlToValidate="RadDatePicker1" 
    Type="Date" Operator="DataTypeCheck" 
    ErrorMessage="开始日期格式无效" 
    Display="Dynamic" />

3. 服务端校验(必须实现,防止客户端校验被绕过)

不要信任任何客户端提交的数据,在后端按钮点击事件中必须做二次校验:

protected void btnSearch_Click(object sender, EventArgs e)
{
    // 校验日期是否合法
    if (!RadDatePicker1.SelectedDate.HasValue)
    {
        pageMsg.Text = "登机开始日期无效,请重新输入";
        return;
    }
    if (!RadDatePicker2.SelectedDate.HasValue)
    {
        pageMsg.Text = "登机结束日期无效,请重新输入";
        return;
    }

    DateTime boardStart = RadDatePicker1.SelectedDate.Value;
    DateTime boardEnd = RadDatePicker2.SelectedDate.Value;
    // 校验日期范围逻辑
    if (boardStart > boardEnd)
    {
        pageMsg.Text = "开始日期不能晚于结束日期";
        return;
    }

    // 校验通过,执行业务查询逻辑
}

内容的提问来源于stack exchange,提问作者gene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:39:20