如何更改MVC中的验证错误消息

时间:2013-08-20 08:31:21

标签: asp.net-mvc validation asp.net-mvc-3

您好我一直在尝试更改验证错误消息(在MVC3中)并阅读了很多线程并从this thread中找到:

  • 为您的项目创建App_GlobalResources文件夹(右键单击到 项目 - >添加 - >添加ASP.NET文件夹 - > App_GlobalResources文件)。
  • 在该文件夹中添加resx文件。说MyNewResource.resx。
  • 使用所需的消息添加资源键PropertyValueInvalid 格式(例如“内容{0}对于字段{1}无效”)。如果你想 更改PropertyValueRequired也会添加它。
  • 将代码DefaultModelBinder.ResourceClassKey =“MyNewResource”添加到 你的Global.asax启动代码。

但我不能让它发挥作用。这是一个干净的MVC 3 Web应用程序,我想更改验证消息。请让它为我和其他人一起工作。

here是我的测试项目的链接

1 个答案:

答案 0 :(得分:0)

经过一些搜索和反复试验后,我使用了一些基于this blog post的代码。改编自以下代码。

在项目中添加一个新类:

using System.Web.Mvc;
public class FixedRequiredAttributeAdapter : RequiredAttributeAdapter
{
    public FixedRequiredAttributeAdapter (ModelMetadata metadata, ControllerContext context, RequiredAttribute attribute)
        : base(metadata, context, attribute)
    {
    }

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
    { 
        // set the error message here or use a resource file
        // access the original message with "ErrorMessage"
        var errorMessage = "Required field!":
        return new[] { new ModelClientValidationRequiredRule(errorMessage) };
    }
}

通过更改global_asax中的应用开始,告诉MVC使用此适配器:

    protected void Application_Start()
    {
        ...
        DataAnnotationsModelValidatorProvider.RegisterAdapterFactory(
            typeof(RequiredAttribute),
            (metadata, controllerContext, attribute) => new FixedRequiredAttributeAdapter(
                metadata,
                controllerContext,
                (RequiredAttribute)attribute));

您可以使用错误消息执行更多操作,例如根据类/属性从资源文件获取:

    var className = Metadata.ContainerType.Name;
    var propertyName = Metadata.PropertyName;
    var key = string.Format("{0}_{1}_required", className, propertyName);

使用MVC5进行测试。

更新:看起来这只适用于javascript / unobtrusive验证。如果您关闭javascript以获得回复验证,它仍会显示“{}字段是必需的”。