Unable to pass Parameter Value in CustomValidation Attribute

Indudhar Gowda 426 Reputation points
2020-06-21T07:02:15.607+00:00

Unable to pass Parameter Value in CustomValidation Attribute

 public string Test { get; set; } = "ValidateSpecialCharacters";  
  
         [CustomValidation(typeof(ValidationTextBox), Test)]  
        public string GeneralDescription  
        {  
            get => _generalDescription;  
            set  
            {  
                SetValue(ref _generalDescription, value);  
                TestBorderBrush = ValidationDictionaryCollection["GeneralDescription"] != string.Empty  
                    ? new SolidColorBrush(Color.FromArgb(0xff, 0xff, 0x00, 0x00))  
                    : new SolidColorBrush(Color.FromArgb(102, 0, 0, 0));  
            }  
        }  
  
        public static ValidationResult ValidateSpecialCharacters(string zip)  
        {  
            var regexItem = new Regex("^[a-zA-Z0-9 ]*$");  
  
            return regexItem.IsMatch(zip)  
                ? ValidationResult.Success  
                : new ValidationResult("Cannot have Special characters");  
        }  

10444-1.gif

I dont want Property to be Constant

Developer technologies | Universal Windows Platform (UWP)
0 comments No comments

Answer accepted by question author

gekka 14,146 Reputation points MVP Volunteer Moderator
2020-06-21T08:24:43.19+00:00

Attribute arguments must be determined at compile time.

Guessing from the code presented, it seems to me that you can achieve your goal by taking an instance from ValidationContext and switching it.

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
using System.Linq;

public class ValidationTextBox : VMBase
{
    public string Test { get; set; } = "ValidateSpecialCharacters";

    [CustomValidation(typeof(ValidationTextBox), nameof(CustomMethod))]
    public string GeneralDescription
    {
        get => _generalDescription;
        set
        {
            SetValue(ref _generalDescription, value);
        }
    }
    private string _generalDescription;

    public static System.ComponentModel.DataAnnotations.ValidationResult CustomMethod(string value, ValidationContext context)
    {
        var instance = (ValidationTextBox)context.ObjectInstance;
        switch (instance.Test)
        {
        case nameof(ValidationTextBox.ValidateSpecialCharacters):
            return ValidationTextBox.ValidateSpecialCharacters(value, context);
        default:
            return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid Parameter");
        }
    }
    public static ValidationResult ValidateSpecialCharacters(string value, ValidationContext context)
    {
        var regexItem = new System.Text.RegularExpressions.Regex("^[a-zA-Z0-9 ]*$");

        return regexItem.IsMatch(value)
            ? ValidationResult.Success
            : new ValidationResult("Cannot have Special characters");

    }
}

Was this answer helpful?

1 person found this answer helpful.

0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.