23

App_GlobalResources使用键添加资源文件PropertyValueRequired并更改DefaultModelBinder.ResourceClassKey为文件名对 MVC 4 没有影响。字符串The {0} field is required永远不会更改。我不想在每个必填字段上设置资源类类型和键。我错过了什么吗?

编辑:

我对 Darin Dimitrov 的代码做了一个小的修改,以保持所需的自定义工作:

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
    public MyRequiredAttributeAdapter(
        ModelMetadata metadata,
        ControllerContext context,
        RequiredAttribute attribute
    )
        : base(metadata, context, attribute)
    {
        if (attribute.ErrorMessageResourceType == null)
        {
            attribute.ErrorMessageResourceType = typeof(Messages);
        }
        if (attribute.ErrorMessageResourceName == null)
        {
            attribute.ErrorMessageResourceName = "PropertyValueRequired";
        }
    }
}
4

1 回答 1

41

这不是 ASP.NET MVC 4 特有的。在 ASP.NET MVC 3 中也是如此。您不能使用 设置所需的消息DefaultModelBinder.ResourceClassKey,只能使用PropertyValueInvalid.

实现您正在寻找的一种方法是定义一个自定义RequiredAttributeAdapter

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
    public MyRequiredAttributeAdapter(
        ModelMetadata metadata,
        ControllerContext context,
        RequiredAttribute attribute
    ) : base(metadata, context, attribute)
    {
        attribute.ErrorMessageResourceType = typeof(Messages);
        attribute.ErrorMessageResourceName = "PropertyValueRequired";
    }
}

您将在以下位置注册Application_Start

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(RequiredAttribute),
    typeof(MyRequiredAttributeAdapter)
);

现在,当一个不可为空的字段没有被赋值时,错误信息将来自Messages.PropertyValueRequiredwhere Messages.resxmust be defined inside App_GlobalResources

于 2012-09-22T17:17:32.850 回答