gpt4 book ai didi

asp.net-mvc - 自定义 DefaultModelBinder 验证消息

转载 作者:行者123 更新时间:2023-12-02 03:34:43 25 4
gpt4 key购买 nike

我正在尝试替换 MVC3 中在您未能填写必填字段或填写无效值时显示的默认验证消息。我只是在解决这个问题中的服务器端验证。我的无效值自定义消息有效,但缺少必填字段的消息不适用。

这是我所做的:

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

    • PropertyValueInvalid:您输入的值无效

    • PropertyValueRequired:此字段是必需的

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

  • 像这样在 Global.asax.cs 中使用 DefaultModelBinder 注册资源文件(注意我使用 Ninject 进行依赖注入(inject)):

    public class MvcApplication : NinjectHttpApplication
    {
    ...
    protected override void OnApplicationStarted()
    {
    ...
    DefaultModelBinder.ResourceClassKey = "DefaultMessages";
    ...
    }
    ...
    }

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

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

[Required]
public DateTime ExpirationDate{ get; set; }

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

[Required(ErrorMessage = "We need a date here!")]
public DateTime ExpirationDate{ get; set; }

但我不想对通常只需要通用消息的所有必需属性执行此操作。 (我知道我可以在 Required 属性中引用资源文件中的通用消息,而不是直接声明消息,但这仍然会给模型增加不必要的困惑。)

最佳答案

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

FieldMustBeDate
FieldMustBeNumeric
PropertyValueInvalid
PropertyValueRequired

关于asp.net-mvc - 自定义 DefaultModelBinder 验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24404192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com