我正在尝试替换MVC3中未能填写必填字段或填写无效值时显示的默认验证消息。我只是在这个问题中解决服务器端验证问题。我的无效值的自定义消息正在运行,但缺少必填字段的消息无法应用。
这就是我所做的:
添加了一个名为" App_GlobalResources"的ASP.NET文件夹。到了web项目,在该文件夹中我放置了一个名为" DefaultMessages.resx"的资源文件,其中包含以下键和值:
PropertyValueInvalid :您输入的值无效
PropertyValueRequired :此字段是必需的
(这些不是我将使用的实际消息;它们将使用不同的语言,这是我需要替换默认语言的主要原因。)
使用Global.asax.cs中的DefaultModelBinder注册资源文件(注意我使用Ninject进行依赖注入):
public class MvcApplication : NinjectHttpApplication
{
...
protected override void OnApplicationStarted()
{
...
DefaultModelBinder.ResourceClassKey = "DefaultMessages";
...
}
...
}
在我的模型中,我有一个名为 ExpirationDate 的DateTime属性。由于DateTime不可为空,因此隐式需要该属性。 PropertyValueInvalid 有效;在我使用 ExpirationDate 字段中的无效值(例如30.02.2014)提交后,我的自定义消息将在表单中呈现。但是如果我将该字段留空并提交,我只会得到默认值" ExpirationDate字段是必需的"。
我在这里缺少什么? PropertyValueRequired 不是正确的名称吗?或者它不适用于隐式要求的属性?我还尝试在模型中添加一个显式的Required属性,如下所示:
[Required]
public DateTime ExpirationDate{ get; set; }
但这没有任何区别。向属性添加自定义错误消息的工作原理是什么,例如:
[Required(ErrorMessage = "We need a date here!")]
public DateTime ExpirationDate{ get; set; }
但我不想为通常只需要通用消息的所有必需属性执行此操作。 (我知道我可以在必需属性的资源文件中引用通用消息,而不是直接声明消息,但这仍然会给模型添加不必要的混乱。)
答案 0 :(得分:1)
对于日期验证,您需要处理本地化:FieldMustBeDate实际上您正在做的是正确的,但为了处理所有消息,您需要将以下消息本地化以防万一:
FieldMustBeDate
FieldMustBeNumeric
PropertyValueInvalid
PropertyValueRequired