ASP MVC数据验证模型属性

时间:2015-05-12 14:24:05

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

我正在使用数据注释属性来为客户端验证提供元信息。以下代码将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; }

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

1 个答案:

答案 0 :(得分: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" })