Asp.net mvc 在ASP.NET MVC中验证日期时间值

Asp.net mvc 在ASP.NET MVC中验证日期时间值,asp.net-mvc,Asp.net Mvc,在ASP.NETMVC5.2项目中,我有一个带有日期时间的模型?财产: public DateTime? Birthday { get; set; } 我认为: @Html.TextBoxFor(x => x.Birthday, "{0:dd-MM-yyyy}") 当我以无效日期提交时,我得到错误: The value '123' is not valid for Birthday. 我想更改此消息,但无法使用我使用的Fluent验证 我认为这条消息被添加到ModelStater错误

在ASP.NETMVC5.2项目中,我有一个带有日期时间的模型?财产:

public DateTime? Birthday { get; set; }
我认为:

@Html.TextBoxFor(x => x.Birthday, "{0:dd-MM-yyyy}")
当我以无效日期提交时,我得到错误:

The value '123' is not valid for Birthday.
我想更改此消息,但无法使用我使用的Fluent验证

我认为这条消息被添加到ModelStater错误中,可能是在模型绑定器中

我在MVC源代码中查找它,但找不到它


有人能告诉我如何覆盖此项吗?

为了避免提交无效日期,您可以添加客户端验证:

查看:

@Html.TextBoxFor(x => x.Birthday, "{0:dd-MM-yyyy}")
@Html.ValidationMessageFor(x => x.Birthday)
型号:

[Required(ErrorMessage = "Date is wrong")]
public DateTime? Birthday { get; set; }
如果未进行客户端验证,则此错误将处于ModelState状态

如果不需要验证,您可以:

1) 按“生日”键从ModealState中删除错误

2) 将
生日
属性设置为字符串
公共字符串生日{get;Set;}
,添加自定义jQuery验证,在服务器上解析此验证


不管是必需日期还是否,由于服务器本地化,模型绑定器将绑定datetime,如果绑定失败,将添加modelstate错误。更正默认模型绑定器将其置于模型状态

通过在资源文件中定义这些消息,然后将资源文件的名称分配到DefaultModelBinder类的静态字符串属性ResourceClassKey中,可以自定义这些消息。必须将隐式必填字段自定义错误消息放在名为DefaultModelBinder_ValueRequired的项下,而将格式错误的自定义错误消息放在名为DefaultModelBinder_ValueInvalid的项下。当客户端和服务器端都使用隐式Required字段自定义错误消息时,服务器端只使用了错误格式的自定义错误消息

消息有两个“孔”{0}表示字段的值,{1}表示字段的显示名。英语的标准消息是:{0}值对{1}无效

为ResourceClassKey属性赋值的好地方是global.asax:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    DefaultModelBinder.ResourceClassKey = "MyResources"; 
    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
}

您可以将必需的属性添加到生日属性,并在视图中添加
@Html.ValidationMessageFor(x=>x.birth)
您的意思是什么?我需要的是在用户插入无效日期时更改错误消息文本。。。如果用户插入空值,那么我可以接受它,因为我不需要填写日期。请参阅下面我编辑的答案。问题是我没有使用资源文件进行本地化,而是使用依赖POT文件的自定义系统。我想我会选择字符串选项。。。我希望避免使用属性,因为我使用的是Fluent Validationgood,我认为使用字符串和自定义jquery验证没有什么不好的