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

ASP.NET中HTML Input Date控件范围与正则验证同时报错问题

解决ASP.NET中Date控件与验证控件的冲突问题

嘿,我来帮你搞定这个问题!你遇到的两个验证控件报错的情况,其实都是配置上的小疏忽,咱们一步步来修复:

问题1:RegularExpressionValidator 报错的原因

你给input type="date"加了正则验证0*[0-9]\d*,但要知道,type="date"的控件在提交时,实际传递的是**yyyy-MM-dd格式的字符串**(比如2005-08-15),里面包含横杠-,你的正则只允许数字,所以哪怕输入正确日期,这个验证也会触发错误。

更关键的是:type="date"控件本身就会限制用户只能选择/输入合法的日期格式,根本不需要额外加正则验证数字。所以直接把这个RegularExpressionValidator删掉就好啦。

问题2:RangeValidator 报错的原因

你在RangeValidator的MaximumValue和MinimumValue里直接写了C#代码DateTime.Now.Date.Value.ToString(yyyy-MM-dd),这是不对的——ASP.NET服务器控件的属性不能直接这样内嵌C#代码,得用服务器端绑定表达式,或者在后台代码里赋值。

另外,日期格式要和date控件的输出格式保持一致,也就是yyyy-MM-dd。

修改后的完整代码

<div class="form-group"> 
    <h5>Date of Birth:</h5> 
    <div class="controls ">
        <div class="input-group"> 
            <span class="input-group-addon"><i class="fa fa-calendar"></i></span> 
            <input type="date" name="bday" class="form-control" id="dateofbirth" runat="server"> 
        </div> 
        <span style="color:red;">
            <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" 
                ErrorMessage="Please Enter Date Of Birth" 
                ControlToValidate="dateofbirth" 
                SetFocusOnError="True">
            </asp:RequiredFieldValidator>
        </span> 
        <span style="color:red;">
            <asp:RangeValidator ID="RangeValidator1" runat="server" 
                ErrorMessage="You are not eligible " 
                ControlToValidate="dateofbirth" 
                Type="Date"
                MaximumValue="<%= DateTime.Now.Date.ToString("yyyy-MM-dd") %>" 
                MinimumValue="<%= DateTime.Now.AddYears(-18).Date.ToString("yyyy-MM-dd") %>">
            </asp:RangeValidator>
        </span> 
    </div> 
</div>

这里要注意几个关键点:

  • 给RangeValidator加上了Type="Date",告诉控件要按日期类型验证,而不是字符串
  • 用<%= %>绑定表达式来获取格式化后的日期字符串,确保格式是yyyy-MM-dd
  • 移除了多余的RegularExpressionValidator

可选:后台代码赋值的方式

如果你不想在前端用绑定表达式,也可以在后台的Page_Load事件里设置范围值:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        RangeValidator1.MaximumValue = DateTime.Now.Date.ToString("yyyy-MM-dd");
        RangeValidator1.MinimumValue = DateTime.Now.AddYears(-18).Date.ToString("yyyy-MM-dd");
        RangeValidator1.Type = ValidationDataType.Date;
    }
}

这样修改后,验证就能正常工作啦——只有当用户没填日期,或者填的日期不在18年前到今天的范围内时,才会触发对应的错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:36:19