0

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();
        }
    }
}
4

1 に答える 1

2

OurThingローカライズされた文字列などを検索するために、生成された強く型付けされたリソースクラスへのポイントを提供すると、以下が機能するはず"EmailUniqueError"です。これは、このクラスの静的プロパティの1つです。

    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));
            ...
        }
    }

また、テストを実行するときは、すべてのプロパティを検証していることを確認してください(たとえば、TryValidateObjectを使用する場合は、最後のパラメーターがtrueに設定されていることを確認してください)。

于 2012-05-29T17:11:10.480 に答える