Jquery 为什么Html.TextBox呈现带有日期验证的字段
我正在将视图模型中的日期时间字段渲染为两个单独的表单字段(日期和时间)。我认为这一行代码:Jquery 为什么Html.TextBox呈现带有日期验证的字段,jquery,asp.net-mvc,asp.net-mvc-4,unobtrusive-validation,Jquery,Asp.net Mvc,Asp.net Mvc 4,Unobtrusive Validation,我正在将视图模型中的日期时间字段渲染为两个单独的表单字段(日期和时间)。我认为这一行代码: @Html.TextBox("EndTime.Date", Model.EndTime.ToShortDateString()) 其呈现为: <input data-val="true" data-val-date="The field Date must be a date." data-val-required="The Date field is required." id="Start
@Html.TextBox("EndTime.Date", Model.EndTime.ToShortDateString())
其呈现为:
<input data-val="true" data-val-date="The field Date must be a date."
data-val-required="The Date field is required." id="StartTime_Date"
name="StartTime.Date" type="text" value="29/09/2012">
- 为什么这个输入字段添加了data-*属性
- 为什么它甚至认为这是一次约会
更新:
事实证明,“错误的日期格式”错误是由Chrome中的一个错误引起的。因为JQuery验证库通过创建一个新的
date()
来验证日期,并且因为Chrome似乎总是将日期解析为en-US(完全忽略区域设置/语言设置),所以当我输入en-UK日期时失败。当您使用与模型对象相同的表单名称时,我遇到了类似的问题。。。表单会自动将其与模型关联
如果您计划在表单提交后自己处理日期/时间值,则可以在模型上创建字段
private string _endDate;
public string EndDate
{
get
{
if (_endDate == null)
_endDate = EndTime.ToShortDateString();
return _endDate;
}
set
{
_endDate = value;
}
}
然后使用EndDate作为文本框字段,甚至使用TextBoxFor并将其映射到模型。您可以随后在post或set访问器中处理数据。有时,您可能会得到不需要的验证字段,即使您没有明确向该属性添加验证属性 您可以通过在应用程序_Start()中添加此选项来禁用此功能: 此外,可以解决您的问题的是,您的property Model.EndTime应该允许空值:
DateTime? EndTime;
为什么这个输入字段添加了data-*属性
因为您已经在应用程序中启用了不引人注目的验证。默认情况下,MVC验证系统支持对值类型(integer、datetime)的required和datatype进行客户端验证
为什么它甚至认为这是一次约会
当您将字符串传递给Html.TextBox
helper方法时,它会检查Model
是否包含任何具有该名称的属性,在您的示例中,Model
有一个名为EndTime
的属性,该属性的类型为DateTime
您正在传递的EndTime.Date
仍然表示类型DateTime
(DateTime
具有类型为DateTime
的属性Date
仅包含日期组件),因此这两个验证由MVC启用
我建议你们两个创建两个不同的属性来存储日期和时间。查看MVC源代码,它似乎在根据字段名采取操作。调查仍在继续……我感觉这与我在名字中使用的型号前缀“.”有关
DateTime? EndTime;