使用自定义格式验证日期时间。麻烦与'。'分隔器

时间:2013-04-23 18:03:49

标签: validation asp.net-mvc-4 unobtrusive-validation

在我的网络应用程序(asp.new mvc)中,我尝试对日期字段进行验证。

如果我使用这个

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime? PeriodBeginFrom { get; set; }

或者

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")]
public DateTime? PeriodBeginFrom { get; set; }

它有效。但是,如果我尝试分开使用'。'分隔符

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy}")]
public DateTime? PeriodBeginFrom { get; set; }

我有一个问题。 jQuery验证说如果我尝试'01 .01.2001',我必须输入日期。

这是视图

<div class="ElementDiv">
   @Html.LabelFor(m => m.Filter.PeriodBeginFrom, new { @class = "Labels" })
   @Html.EditorFor(m => m.Filter.PeriodBeginFrom, new { @class = "TextBoxes" })
   @Html.ValidationMessageFor(m => m.Filter.PeriodBeginFrom, null, new { @class = "Errors" })
</div>

为什么?与其他所有分隔符一起使用。 “问题”是什么问题。 separatior?

更新1:似乎验证无法正常运行。如果我在我的模型中有这个属性

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime? PeriodBeginFrom { get; set; }

我们将DateTime对象传递给模型,它将在文本框中显示为'。'比如'12 .12.2012'并不像我在等待'2012年12月12日'。希望你能给我一些想法。

2 个答案:

答案 0 :(得分:1)

您正在查看日期组件。但请记住,时间组件可以包括秒和小数秒,其间为中间。由于日期和时间经常合并,如果将这段时间视为特殊角色,我不会感到惊讶。

更新

我浏览了以下文档链:

DisplayFormatAttribute.ApplyFormatInEditMode Property

DisplayFormatAttribute.DataFormatString Property

Formatting Types

Custom Date and Time Format Strings

我希望看到句点字符在格式字符串中有特殊含义。相反,文档没有专门列出句点字符。这意味着它应该属于“任何其他字符”的类别,因此,“字符被复制到结果字符串不变。”

然而,我不相信。分数秒出现在23:59:59.999之类的时间成分中,我怀疑对于时期特征没有未记载的特殊处理。

答案 1 :(得分:1)

格式问题不是ASP标记和字段,而是使用不显眼的验证jquery库。我不得不为我的日期格式重载不显眼的JavaScript验证方法。更多细节在这里 MVC DateTime validation - UK Date format