Kim*_*jan 18 .net asp.net-mvc-2-validation data-annotations asp.net-mvc-2
有一种方法可以将默认资源设置为数据注释验证吗?
我不想做这样的事情:
[Required(ErrorMessage="Name required.", ErrorMessageResourceType=typeof(CustomDataAnnotationsResources)]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
Global.asax中
DataAnnotations.DefaultResources = typeof(CustomDataAnnotationsResources);
Run Code Online (Sandbox Code Playgroud)
然后
[Required]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
有人给我一个光!
提前致谢
编辑
我真正的问题是使用EF Code First CTP4.CTP5修复它.谢谢大家.
CGK*_*CGK 13
你可以尝试这样做:
在项目的某处添加此类:
public class ExternalResourceDataAnnotationsValidator : DataAnnotationsModelValidator<ValidationAttribute>
{
/// <summary>
/// The type of the resource which holds the error messqages
/// </summary>
public static Type ResourceType { get; set; }
/// <summary>
/// Function to get the ErrorMessageResourceName from the Attribute
/// </summary>
public static Func<ValidationAttribute, string> ResourceNameFunc
{
get { return _resourceNameFunc; }
set { _resourceNameFunc = value; }
}
private static Func<ValidationAttribute, string> _resourceNameFunc = attr => attr.GetType().Name;
public ExternalResourceDataAnnotationsValidator(ModelMetadata metadata, ControllerContext context, ValidationAttribute attribute)
: base(metadata, context, attribute)
{
if (Attribute.ErrorMessageResourceType == null)
{
this.Attribute.ErrorMessageResourceType = ResourceType;
}
if (Attribute.ErrorMessageResourceName == null)
{
this.Attribute.ErrorMessageResourceName = ResourceNameFunc(this.Attribute);
}
}
}
Run Code Online (Sandbox Code Playgroud)
并在您的global.asax中,添加以下内容:
// Add once
ExternalResourceDataAnnotationsValidator.ResourceType = typeof(CustomDataAnnotationsResources);
// Add one line for every attribute you want their ErrorMessageResourceType replaced.
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RangeAttribute), typeof(ExternalResourceDataAnnotationsValidator));
Run Code Online (Sandbox Code Playgroud)
它将查找与错误消息的验证程序类型同名的属性.您可以通过ResourceNameFunc属性更改它.
编辑:AFAIK从MVC2开始,因为DataAnnotationsModelValidatorProvider是在MVC2中引入的.
Joh*_*ika 12
为此,我创建了一个继承自RequiredAttribute的新类,并将错误消息嵌入到这个新类中:
public class RequiredWithMessageAttribute : RequiredAttribute
{
public RequiredWithMessageAttribute()
{
ErrorMessageResourceType = typeof(ValidationResource);
ErrorMessageResourceName = "RequiredErrorMessage";
}
}
Run Code Online (Sandbox Code Playgroud)
错误消息来自ValidationResource.resx文件,我在其中列出错误消息,如下所示:
RequiredErrorMessage - >"{0}是必需的."
其中{0} =显示名称.
然后我像这样注释我的模型,所以我永远不必重复我的错误消息声明:
[RequiredWithMessage]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
执行此操作后,只要验证失败,就会出现错误消息("名称是必需的.").
这适用于ASP.NET MVC的服务器端验证和客户端验证.
归档时间: |
|
查看次数: |
6844 次 |
最近记录: |