1

リソースファイルからRegularExpressionとErrorMessageを取得するカスタムRegularExpressionValidatorを作成するにはどうすればよいですか?

 [RegularExpression(@"\d{5}(-\d{4})?",
          ErrorMessageResourceType = typeof(Global), ErrorMessageResourceName = "regExpValforPostal_ErrorMessage")]
        public string PostalCode { get; set; }
4

2 に答える 2

3

リソース ファイル名は Global です。

Global.resx、Global.zh.resx、Global.fr-ca.resx

 [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)]
    public class LocalizedRegexAttribute : RegularExpressionAttribute
    {


        static LocalizedRegexAttribute()
        {
            // necessary to enable client side validation
            DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(LocalizedRegexAttribute), typeof(RegularExpressionAttributeAdapter));
        }

        public LocalizedRegexAttribute(string _RegularExpression, string _ErrorMessageResourceName, Type _ErrorMessageResourceType)
            : base(LoadRegex(_RegularExpression))
        {
            ErrorMessageResourceType = _ErrorMessageResourceType;
            ErrorMessageResourceName = _ErrorMessageResourceName;

        }

        private static string LoadRegex(string key)
        {
            var resourceManager = new ResourceManager(typeof(Water.Localization.Resources.Global));
            return resourceManager.GetString(key);
        }

モデル クラスでは、次のようにカスタム データ アノテーションを使用して 3 つのパラメーターを渡す必要があります。

[LocalizedRegex("regExpValforPostal_ValidationExpression", "regExpValforPostal_ErrorMessage", typeof(Global))]
        public string PostalCode { get; set; }
于 2012-09-18T16:11:49.470 に答える
2

Validations.he.resxというリソースファイルがあり、その中に「RegexExpression」と「ErrorMessage」の両方がある場合は、次を使用する必要があります。

更新#1:オプション2が追加されました

  • オプション1:

    public class LocalizedRegexAttribute :RegularExpressionAttribute
    {
        public LocalizedRegexAttribute () : base(Validations.RegexExpression)
        {
    
        }
    
        public override string FormatErrorMessage(string name)
        {
            return base.FormatErrorMessage(ValidationStrings.ErrorMessage);
        }
    }
    
  • オプション2:

public class EmailAddressAttribute :ValidationAttribute {
public EmailAddressAttribute()
{

}

public override bool IsValid(object value)
{
    Regex regex = new Regex(Validations.RegexExpression);
    return regex.IsMatch(value.ToString());
}

public override string FormatErrorMessage(string name)
{
    return base.FormatErrorMessage(ValidationStrings.ErrorMessage);
} }

あなたがこのようにそれを使うより:

[LocalizedRegexAttribute]
public string PostalCode { get; set; }
于 2012-09-18T00:23:28.533 に答える