首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义DefaultModelBinder验证消息

自定义DefaultModelBinder验证消息
EN

Stack Overflow用户
提问于 2014-06-25 08:52:29
回答 1查看 1.1K关注 0票数 3

我正在尝试替换MVC3中的默认验证消息,这些消息在您无法填写所需字段或填写无效值时显示。在这个问题中,我只讨论服务器端验证。我的无效值的自定义消息正在工作,但是丢失所需字段的消息将不适用。

这就是我所做的:

  • 在web项目中添加了一个名为“ASP.NET”的App_GlobalResources文件夹,并在该文件夹中放置了一个名为"DefaultMessages.resx“的资源文件,其中包含以下键和值:

代码语言:javascript
复制
- _PropertyValueInvalid_: The value you input is invalid
- _PropertyValueRequired_: This field is required

(这些不是我将要使用的实际消息;它们将使用不同的语言,这是我需要替换默认消息的主要原因)。

  • 像这样在DefaultModelBinder中用Global.asax.cs注册资源文件(请注意,我正在使用Ninject进行依赖项注入): 公共类MvcApplication : NinjectHttpApplication {.保护覆盖无效OnApplicationStarted() {.DefaultModelBinder.ResourceClassKey = "DefaultMessages";…}

在我的模型中,我有一个名为DateTime的ExpirationDate属性。由于DateTime是不可空的,因此该属性是隐式要求的。PropertyValueInvalid工作;在提交ExpirationDate字段中的无效值(如30.02.2014 )后,我的自定义消息将在表单中呈现。但是,如果我将字段留为空并提交,则只能得到默认的“ExpirationDate字段是必需的”。

我在这里错过了什么?PropertyValueRequired的名字不对吗?还是它不适用于隐式要求的属性?我还尝试在模型中添加一个显式的必需属性,如下所示:

代码语言:javascript
复制
[Required]
public DateTime ExpirationDate{ get; set; }

但这没什么区别。工作是向属性添加自定义错误消息,例如:

代码语言:javascript
复制
[Required(ErrorMessage = "We need a date here!")]
public DateTime ExpirationDate{ get; set; }

但是,我不想对通常只需要一个通用消息的所有所需属性都这样做。(我知道我可以在所需的属性中引用资源文件中的通用消息,而不是直接声明消息,但这仍然给模型增加了不必要的混乱。)

EN

回答 1

Stack Overflow用户

发布于 2014-08-19 11:25:06

对于日期验证,您需要处理: FieldMustBeDate的本地化,实际上您所做的是正确的,但是为了处理所有消息,您需要本地化以下消息,以防万一:

代码语言:javascript
复制
FieldMustBeDate
FieldMustBeNumeric
PropertyValueInvalid
PropertyValueRequired
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24404192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档