【问题标题】:ASP MVC data validation model attributesASP MVC 数据验证模型属性
【发布时间】:2015-05-12 14:24:04
【问题描述】:

我正在使用数据注释属性来为客户端验证提供元信息。以下代码将data-val-date属性正确添加到相应的html输入元素:

    [DataType(DataType.Date)]
    public DateTime? TestDate { get; set; }

我也有日期和时间输入字段,我想在那里应用不同的验证规则。但是,添加不同的 DataType 值不会改变呈现的输入元素:

    [DataType(DataType.DateTime)]
    public DateTime? TestDate { get; set; }

以 非常 相同的方式呈现,我的意思是它也呈现 data-val-date 属性,因此在客户端,这两种输入验证是无法区分的。

作为奖励使用

    [DataType(DataType.Time)]
    public DateTime? TestDate { get; set; }

呈现 no data-val 属性。 那么不同的DataType属性有什么用呢?更重要的是,如何正确渲染 data-val-datetime 和 data-val-time 属性? (我将使用 jQuery 验证在客户端以自定义方式处理)

【问题讨论】:

  • 我觉得还是用正则表达式验证比较好[RegularExpression("pattern")]
  • 相信这个问题的答案会对你有所帮助:stackoverflow.com/questions/5390403/…
  • @MikeDebela:在这样的场景中使用正则表达式验证的一个大问题是本地化。日期/时间格式在全球范围内变化很大,尝试在正则表达式中容纳每个潜在输入有点像噩梦。

标签: c# jquery asp.net asp.net-mvc validation


【解决方案1】:

DataType 属性的部分目的是告知Html.EditorFor 等使用什么模板。但是,如果您只是简单地调用 @Html.TextBoxFor(m => m.TestDate) 之类的东西,那么 DataType 的效用就会越来越有限。

客户端验证是 MVC 仅使用的单独库。正如您在documentation for that library 看到的那样,没有“datetime”验证器,只有“date”和“dateISO”。同样明显缺少的是“时间”。

不过,您实际上可以在这里做的最好的事情是利用 HTML5 输入类型,因为它们不仅会验证正确的日期/时间/日期时间输入,而且它们应该自动本地化为用户的首选格式(假设浏览器遵循这方面的规范)。

要充分利用您的DataType 属性,您应该使用Html.EditorFor 呈现您的输入,默认情况下它将包括基于DataType 的正确HTML5 输入类型。

除此之外,您可以手动指定类型:

 @Html.TextBoxFor(m => m.TestDate, new { type = "date" })

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多