MVC 数据类型错误消息

7

DataType的错误信息不起作用。 MVC4 DataType的错误信息似乎不起作用。 我有这个数据注释属性:

[DataType(DataType.DateTime, ErrorMessage = "Invalid date")]
public override DateTime? BirthDate { get; set; }

但是客户端验证返回以下错误:

出生日期字段必须为日期。

这是HTML代码部分:

 <input Value="" class="date" data-val="true" data-val-date="The field BirthDate  must be a date." data-val-required="El campo Fecha nacimiento es obligatorio" id="Patient_BirthDate" name="Patient.BirthDate" type="text" value="" />

有什么想法吗?

可能是DataTypeAttribute显示错误的消息的重复问题。 - archil
感谢Archil,但ErrorMessage的含义是什么?另外,为什么属性[Required(ErrorMessageResourceType = typeof(Messages.GeneralMessages), ErrorMessageResourceName = "Required")]不能正常工作? - Donald
我明白了,在MVC 4中可以本地化默认错误消息。链接 - Donald
2个回答

8
在MVC 4中,我可以使用Html.ValidationMessageFor在视图中更改错误消息。 看一个例子: @Html.ValidationMessageFor(model => model.FechaDesde, "Fecha Inválida") 其中,“Fecha Inválida”是更改后的错误消息。

我发现的问题是,无论数据是否有效,它都会显示错误。 - Reisclef

6

简短回答:DataType.DateTime的目的不是为了验证你的生日属性中的DateTime输入。这就是原因。它只是在显示之前格式化DateTime。

你需要的是在上面加上[Required]属性。

然而,我通常喜欢使用Jquery Datepicker,它甚至不允许用户输入任何文本,但必须是有效的日期。

编辑:当你用[DataType(DataType.Date)]装饰模型属性时,在ASP.NET MVC 4中默认模板会生成一个type="date"的输入字段。支持HTML5的浏览器如Google Chrome将使用日期选择器渲染此输入字段。

你可以使用以下代码来强制实现:

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? BirthDate { get; set; }

为了正确显示日期,值必须格式化为2012-09-28

好的,这很有道理,但 ErrorMessage 的含义是什么? - Donald
当您使用[DataType(DataType.Date)]修饰模型属性时,ASP.NET MVC 4中的默认模板会生成一个type="date"的输入字段。支持HTML5的浏览器如Google Chrome会使用日期选择器来呈现此输入字段。为了正确显示日期,值必须格式化为2012-09-28。 - Yusubov
我已经更新了我的答案,并提供了示例和更多的解释。 - Yusubov
2
好的,谢谢ElYusubov。经过一些研究,我发现这个消息是框架内部的,所以唯一的解决方案就是实现自定义验证。 - Donald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接