出生datevalidation不断显示
我正在input一个DOB
– 22/12/1986
到我的文本框中,validation不断发射。 它说:
The field DOB must be a date.
我的模特 :
[System.ComponentModel.DisplayName("DOB")] [DisplayFormat(DataFormatString = "@{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] [Required(ErrorMessage = "Date Of Birth is required")] [RegularExpression(@"{0:dd/MM/yyyy}", ErrorMessage = "Invalid Date")] // below is a link public DateTime DOB { get; set; }
我的观点 :
<div class="form-group"> @Html.LabelFor(model => model.DOB, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.DOB, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.DOB, "", new { @class = "text-danger" }) </div> </div>
在MS SQL database
,字段是: DateTime
为什么我的validation说我input的date无效?
客户端validation的原因是由jquery.validate.unobtrusive.js
使用的jquery.validate.js
插件validation基于MM/dd/yyyy
格式的date和基于dd/MM/yyyy
格式的inputdate。
jquery.validate.js
用于validation的具体代码是
date: function(value, element) { return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); }
这取决于你使用的浏览器会给出不同的结果(在Chrome中, new Date('22/12/1986')
1987-10-11T13:30:00.000Z
new Date('22/12/1986')
返回Invalid Date
但是在FireFox中返回1987-10-11T13:30:00.000Z
这是有效的,而不是你input的date)
您需要重写$.validator
来格式化文化中的date。 一个select是使用jquery.globalize插件。
或者,您可以编写自己的脚本。 请注意,以下脚本是从我自己的插件中使用的,并与生成dateselect器的@Html.DatePickerFor()
扩展方法结合使用。 扩展方法为基于服务器文化的date格式添加html属性,并使用var format = regex.exec(this.inputFormat);
读取var format = regex.exec(this.inputFormat);
我已经注释掉了一行代码,并用您的硬编码格式replace。 如果您只想要dd/MM/yyyy
格式,那么脚本可以简化,因为您只需要“小尾数”格式
<script type="text/javascript"> // Override default date validator format to allow culture specific format $.validator.methods.date = function (value, element) { return this.optional(element) || globalDate(value).isValid(); }; globalDate = function (value) { // Initialise a new date var date = new Date(); date.setHours(0, 0, 0, 0); if (value == undefined) { // Return todays date return date; } // Get the components of the format // The separator can be forward slash, hyphen, dot and/or space var regex = new RegExp(/([dMy]+)([\s/.-]+)([dMy]+)([\s/.-]+)([dMy]+)/); //------------- see notes above //var format = regex.exec(this.inputFormat); var format = regex.exec('dd/MM/yyyy'); //------------- // Get the components of the value regex = new RegExp(/(\d+)([\s/.-]+)(\d+)([\s/.-]+)(\d+)/); value = regex.exec(value); // Check the value is valid if (value === null || value[2] !== format[2] || value[4] !== format[4]) { // Its not valid date.setTime(Number.NaN); return date; } // TODO: What if year entered as 2 digits? var day = Number.NaN; var month = Number.NaN; var year = Number.NAN; if (format[1].charAt(0) === 'd') { // little-endian (day, month, year) day = parseInt(value[1]); month = parseInt(value[3]) - 1; year = parseInt(value[5]); } else if (format[1].charAt(0) === 'M') { // middle-endian (month, day, year) day = parseInt(value[3]); month = parseInt(value[1]) - 1; year = parseInt(value[5]); } else { // big endian (year, month, day) day = parseInt(value[5]); month = parseInt(value[3]) - 1; year = parseInt(value[1]); } date.setFullYear(year); date.setMonth(month); date.setDate(day); // Check its valid if (date.getDate() !== day || date.getMonth() !== month || date.getFullYear() !== year) { date.setTime(Number.NaN); return date; } return date; } // Methods Date.prototype.isValid = function () { return !isNaN(this.getTime()); } </script>
注意:你的[RegularExpression]
属性什么都不做,可以删除。
replace.
在Ganesh提到的地方都有/
DisplayFormat
属性和RegularExpression
属性。
- 如何在Razor中编写“Html.BeginForm”
- ASP.NET视图中的区域?
- 不显眼的validation不适用于dynamic添加的局部视图
- 如何在ASP.MVC中指定多行编辑器的列和行?
- 使用Razor View Engine从ASP.NET MVC 3的局部视图中将内容注入特定的部分
- 如何在razor中指定数据属性,例如@ this.Html.CheckBoxFor(…)上的data-externalid =“23151”
- 尝试“System.Web.Mvc.PreApplicationStartCode.Start()”到关键方法“System.Web.WebPages.Razor.PreApplicationStartCode.Start()”失败
- 动作图像MVC3剃刀
- asp.net mvc 3 razor视图 – >强types元组列表问题