手动键入时,为什么jquery datepicker允许数字超过日期阈值?

时间:2018-07-20 21:46:03

标签: validation date datepicker date-format

这是一个带有jquery的MVC应用。如果用户手动键入日期的每个组成部分(而不是单击日期选择器GUI),为什么datepicker允许不通过常识测试的数字?例如,我可以在日期选择器中手动输入我认为无效的日期,直到我超过某个阈值,它才会引发错误。

01/01/2018
01/31/2018 
01/41/2018 <-javascript converts this to February 10 2018, but the .NET form converts it to 01/01/0001.
01/41/201888 <-javascript converts this to February 10 201888, but the .NET form converts it to 01/01/0001.
01/41/2018888 <-date validator fires after 7th digit in year field

123/12/2018 <- javascript converts this to June 9 129, why doesn't validator fire?
123/41/2018 <-javascript converts this to Nov 8 131, why doesn't validator fire?
123/123/12 <-date validator fires
123/12/1234567 <-date validator fires

还没有尝试所有组合,但是我想让Datepicker触发.NET隐瞒01/01/0001的所有内容的验证器。 Javascript比.NET更令人迷惑,所以我遇到了伪造的大门。

有时日期选择器知道我输入的是mm / dd / yy,其他时候(当我先输入3位数字时)则认为格式是yy / mm / dd。我们不能告诉我们只希望日期以一种方式解释吗?

用户必须能够键入或使用datepicker GUI。我应该在自定义验证器中使用正则表达式吗?对我来说,日期选择器比.NET宽容得多,这似乎让我感到奇怪,而且我还没有找到一种简单的方法来缩小差距。

MVC视图

@Html.LabelFor(m => m.DateOfBirth)
@Html.TextBoxFor(m => m.DateOfBirth, new { @class = "date-picker" })
@Html.ValidationMessageFor(m => m.DateOfBirth)

视图中的jQuery

$(function () {

    $('.date-picker').datepicker();
});

MVC模型

[Display(Name = "Date of Birth")]    
[Required(ErrorMessage = "Required")]
[DisplayFormat(DataFormatString = "{0:mm/dd/yy}", ApplyFormatInEditMode=true)]
[DataType(DataType.Date)]
public System.DateTime DateOfBirth { get; set; }

0 个答案:

没有答案