【发布时间】:2014-08-15 18:03:07
【问题描述】:
我正在尝试替换 MVC3 中在您未能填写必填字段或填写无效值时显示的默认验证消息。我只在这个问题中解决服务器端验证问题。我的无效值自定义消息正在运行,但缺少必填字段的消息将不适用。
这就是我所做的:
-
在 Web 项目中添加了一个名为“App_GlobalResources”的 ASP.NET 文件夹,并在该文件夹中放置了一个名为“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]
public DateTime ExpirationDate{ get; set; }
但这并没有什么区别。起作用的是向属性添加自定义错误消息,例如:
[Required(ErrorMessage = "We need a date here!")]
public DateTime ExpirationDate{ get; set; }
但我不想对通常只需要通用消息的所有必需属性执行此操作。 (我知道我可以在Required 属性中引用资源文件中的通用消息,而不是直接说明消息,但这仍然会给模型增加不必要的混乱。)
【问题讨论】:
-
似乎您无法在资源文件上设置
DefaultModelBinderrequired 消息。问题回答 MVC4 但显然与 MVC3 相同。已经在这里回答stackoverflow.com/questions/12545176/…
标签: asp.net-mvc asp.net-mvc-3 validation