C# 抛出本地化的ValidationException
我正在创建一个自定义属性验证,当抛出ValidationException时,它应该使用指定资源文件中的错误字符串。如果我抛出一个异常并且没有在参数中指定错误字符串,那么它应该使用我在构造函数中指定的ErrorMessageResourceName和ErrorMessageResourceType,这一假设正确吗C# 抛出本地化的ValidationException,c#,validation,C#,Validation,我正在创建一个自定义属性验证,当抛出ValidationException时,它应该使用指定资源文件中的错误字符串。如果我抛出一个异常并且没有在参数中指定错误字符串,那么它应该使用我在构造函数中指定的ErrorMessageResourceName和ErrorMessageResourceType,这一假设正确吗 using System; using System.ComponentModel.DataAnnotations; using System.Text.RegularExpressi
using System;
using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;
namespace OurProduct.Util
{
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class UniquenessAttribute : ValidationAttribute
{
public UniquenessAttribute()
{
ErrorMessageResourceName = "EmailUniqueError";
ErrorMessageResourceType = typeof (Resources.OurThing);
}
protected override ValidationResult IsValid(object value)
{
throw new ValidationException();
}
}
}
如果
OurThing
指向生成的强类型资源类,用于查找本地化字符串等,并且“EmailUniqueError”
是此类的静态属性之一,则以下操作应该有效:
public class UniquenessAttribute : ValidationAttribute
{
public UniquenessAttribute()
{
ErrorMessageResourceName = "EmailUniqueError";
ErrorMessageResourceType = typeof (Resources.OurThing);
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (failure) // to implement
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
...
}
}
在进行测试时,还要确保正在验证所有属性(例如,如果使用,请确保最后一个参数设置为true)。是的,我知道不可能返回ValidationResult。在本例中成功,但我知道这是可行的;)如果我们的东西指向生成的强类型资源类,用于查找本地化字符串等,那么它应该可以工作,“EmailUniqueError”是此类的静态属性之一。在执行测试时,还要确保正在验证所有属性(例如,如果使用TryValidateObject,请确保最后一个参数设置为true)。但是不要抛出,只需返回false到IsValid()@SimonMourier你能详细说明你的最后一句话吗?我之所以使用需要ValidationResult的IsValid版本,是因为我需要查找父对象的其他成员的值,以调用服务。问题在于尝试返回ValidationResult.Success(当它工作正常时),但返回一条正确本地化的ErrorMessage(当它不正常时)。Ok,那么您应该返回如下内容:
ReturnNew ValidationResult(FormatErrorMessage(validationContext.DisplayName))代码>以防出错。西蒙,你太棒了。请回答这个问题,这样我就可以接受了。