2

嗨,我一直在尝试更改验证错误消息(在 MVC3 中)并阅读了很多线程并从该线程中找出:

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

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

是我的测试项目的链接

4

1 回答 1

0

经过一番搜索和反复试验,我使用了一些基于这篇博文的代码。改编代码如下。

为您的项目添加一个新类:

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) };
    }
}

通过更改 app start in 来告诉 MVC 使用此适配器global_asax

    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 以获取回发验证,它仍会显示“{} 字段是必需的”。

于 2015-10-14T16:59:39.880 回答