Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 抛出本地化的ValidationException_C#_Validation - Fatal编程技术网

C# 抛出本地化的ValidationException

C# 抛出本地化的ValidationException,c#,validation,C#,Validation,我正在创建一个自定义属性验证,当抛出ValidationException时,它应该使用指定资源文件中的错误字符串。如果我抛出一个异常并且没有在参数中指定错误字符串,那么它应该使用我在构造函数中指定的ErrorMessageResourceName和ErrorMessageResourceType,这一假设正确吗 using System; using System.ComponentModel.DataAnnotations; using System.Text.RegularExpressi

我正在创建一个自定义属性验证,当抛出ValidationException时,它应该使用指定资源文件中的错误字符串。如果我抛出一个异常并且没有在参数中指定错误字符串,那么它应该使用我在构造函数中指定的ErrorMessageResourceName和ErrorMessageResourceType,这一假设正确吗

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))以防出错。西蒙,你太棒了。请回答这个问题,这样我就可以接受了。