将资源文件添加到具有PropertyValuerequired键的App_GlobalResources中,并将DefaultModelBinder.ResourceClassKey更改为文件名对MVC 4没有影响。字符串{0}字段是必需的,从未更改。
我不想在每个必填字段上设置资源类类型和密钥。
我错过了什么吗?
我不想在每个必填字段上设置资源类类型和密钥。
我错过了什么吗?
编辑:
我对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"; } } }
解决方法
这不是特定于ASP.NET MVC 4.它在ASP.NET MVC 3中是一样的。您不能使用DefaultModelBinder.ResourceClassKey设置所需的消息,只能使用PropertyValueInvalid。
实现您要查找的一种方法是定义一个自定义的requiredAttributeAdapter:
public class MyrequiredAttributeAdapter : requiredAttributeAdapter { public MyrequiredAttributeAdapter( ModelMetadata Metadata,requiredAttribute attribute ) : base(Metadata,attribute) { attribute.ErrorMessageResourceType = typeof(Messages); attribute.ErrorMessageResourceName = "PropertyValuerequired"; } }
您将在Application_Start中注册:
DataAnnotationsModelValidatorProvider.RegisterAdapter( typeof(requiredAttribute),typeof(MyrequiredAttributeAdapter) );
现在当一个不可为空的字段未分配一个值时,错误消息将来自Messages.PropertyValuerequired,其中必须在App_GlobalResources中定义Messages.resx。