我在页面上有两个单独的字段:一个日期和一个时间.
这是模型:
[required] [DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:hh:mm tt}")] public DateTime? StartTime { get; set; } [required] [DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:MM/dd/yyyy}")] public DateTime Date { get; set; }
这是视图:
@Html.TextBoxFor(m => m.Date,"{0:MM/dd/yyyy}",new { type = "text" }) @Html.TextBoxFor(m => m.StartTime,"{0:hh:mm tt}",new { type = "text",id = "timeStart" })
但是,当我在StartTime中输入“11:00 PM”或“11:00 pm”时,该JavaScript不显眼的验证可以正常使用Date字段,验证显示
“The field StartTime must be a date”
服务器端验证工作正常,“0:hh:mm tt”只有javascript有问题.现在我只是禁用JavaScript验证,但最终会在此页面上
这可以为“时间”领域做好吗?
解决方法
老实说,实现这一点的最简单的方法是使用正则表达式验证器.这是一个例子.
[RegularExpression(@"^(0[1-9]|1[0-2]):[0-5][0-9] (am|pm|AM|PM)$",ErrorMessage = "Invalid Time.")]
不引人注意的验证应该与此表达式正常工作.
希望这可以帮助你!
编辑
我修正了由于某些非法字符而在控制台中引发错误的正则表达式.此外,您将需要此属性的字符串属性包装器,否则它将始终寻找有效的DateTime.
以下是您应该绑定的内容.
模型:
public DateTime? StartTime { get; set; } [required] [RegularExpression(@"^(0[1-9]|1[0-2]):[0-5][0-9] (am|pm|AM|PM)$",ErrorMessage = "Invalid Time.")] public string StartTimeValue { get { return StartTime.HasValue ? StartTime.Value.ToString("hh:mm tt") : string.Empty; } set { StartTime = DateTime.Parse(value); } }
视图:
@Html.TextBoxFor(m => m.StartTimeValue)