这是一个带有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; }