在编辑模板中获取所需属性的本地化错误消息?

时间:2014-09-30 10:43:59

标签: c# asp.net-mvc asp.net-mvc-5

我开始通过添加自定义资源文件并将 ClientDataTypeModelValidatorProvider DefaultModelBinder 绑定到此来本地化默认模型验证错误消息:

ClientDataTypeModelValidatorProvider.ResourceClassKey = "MyModelValidation";
DefaultModelBinder.ResourceClassKey = "MyModelValidation";

然后我发现错误消息 PropertyValueRequired 仅在缺少非可空属性时触发,因此未显示本地化错误消息,例如缺少字符串。为了解决这个问题,我可以使用 ErrorMessageResourceName ErrorMessageResourceType 在相关属性上提供 RequiredAttribute ,让它在自定义资源文件中查找值

全局应用于我所做的所有必需属性:

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

protected void Application_Start()
    {
        DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredAttribute), typeof(CustomRequiredAttributeAdapter));
    ...
    }

这样可以正常工作,除非在我有自定义 EditorTemplate 的地方使用自定义数据类型。此处未使用 CustomRequiredAttributeAdapter ,我可以从提供给EditorTemplate的 ModelMetaData 中解析出的唯一数据是默认的英语错误消息。

为什么没有为自定义数据类型调用自定义 RequiredAttributeProvider ?是否可以启用此功能而无需在 RequiredAttributes 中为自定义数据类型显式设置对资源文件的引用?

0 个答案:

没有答案