在日期选择器中验证日期

4

我有两个日期选择器:

$(".From").datepicker({
dateFormat: 'dd/mm/yy',
numberOfMonths: 1,
autoclose: true,
onClose: function(selectedDate) {
    $(".To").datepicker("option", "minDate", selectedDate);
}});


$(".To").datepicker({
dateFormat: 'dd/mm/yy',
numberOfMonths: 1,
autoclose: true,
onClose: function(selectedDate) {
    $(".From").datepicker("option", "maxDate", selectedDate);
}});

视图:

 @Html.TextBoxFor(model => model.From, new { @class = "form-control From" })
 @Html.TextBoxFor(model => model.To, new { @class = "form-control To" })

型号:

    [Display(Name = "From")]
    public string From { get; set; }

    [Display(Name = "To")]
    public string To { get; set}; 

当用户手动输入日期时,会失败。

有没有一种方法允许用户输入日期并进行验证?

选项1:我应该使用正则表达式吗?


模型,视图,控制器……等等,你用的是哪个框架? - T J
当您说“它失败”时,您能否解释一下您的意思?具体发生了什么和您期望发生什么?此外,您似乎没有任何验证规则可供验证。 - Jasen
@Jasen,它没有验证用户输入的日期。例如:11/13/2014作为第13个月不存在。期望输出:“请输入有效日期”-作为错误消息,必须添加到验证规则中。我应该使用数据注释吗? - test acc
你需要使用某种方式,而Data Annotations和ValidationMessageFor助手结合起来是一种很好的内置工具,可用于验证输入。这可能需要使用DateTime数据类型才能正常工作。你现在的做法可以在编程上限制选项,但并没有明确验证输入。另一个选项是防止直接键盘输入,这样只有通过日期选择器小部件获得的值是可用的——这些值应该是有效的日期。 - Jasen
1个回答

1
这是一个工作示例。

模型

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode=true)]
[DisplayName(Name = "From")]
public DateTime? From { get; set; }  // note the data type

View

@Html.TextBoxFor(model => model.From, new { @class = "form-control From" })
@Html.ValidationMessageFor(model => model.From)

不要忘记加载验证脚本

jquery.validate.js
jquery.validate.unobtrusive.js 

当您尝试输入错误的日期时,将会收到一个验证错误消息。

对我来说不起作用。对于有效日期会抛出错误,如:“字段必须是日期”,这是不正确的。我之前尝试过这个并将其更改为字符串数据类型。 - test acc
看起来你正在遇到date culture format问题。如果您改用dateFormat:'mm / dd / yy',这可能会起作用。但最好指定一个不同的格式——链接的帖子详细解释了这一点。 - Jasen
是的,它接受 mm/dd/yy 格式。但我们需要 dd/mm/yy 格式。为了克服这个错误,它被更改为字符串。 - test acc
请问您能再次发送那篇帖子的链接吗? - test acc
我已经在web.config中包含了<globalization culture="en-GB" uiCulture="en-GB" />。 - test acc
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接