Наследовать аннотацию данных StringLengthAttribute - PullRequest
0 голосов
/ 15 октября 2018

Я хочу создать пользовательский атрибут, унаследовав StringLengthAttribute.Причина в том, что мне нужно использовать динамическое сообщение об ошибке.По умолчанию ErrorMessage поддерживает только постоянное сообщение.Это работает, когда я использую проверку по умолчанию без постоянного сообщения.

public class CustomerProfile
{
    public string Username { get; set; }
    [StringLength(10,ErrorMessage ="Original Error Message")]
    public string Name { get; set; }
    public string Mobile { get; set; }
    public string Email { get; set; }
}

enter image description here

Но когда я использую код ниже для создания пользовательского сообщения, этоотображается как всплывающее окно с предупреждением вместо отображения сообщения проверки над текстовым полем.

public class CustomerProfile
{
    public string Username { get; set; }
    //[StringLength(10,ErrorMessage ="Original Error Message")]
    [MaxNameLengthAttributes(10)]
    public string Name { get; set; }
    public Gender Gender { get; set; }
    public string Mobile { get; set; }
    public string Email { get; set; }
}

public class MaxNameLengthAttributes : StringLengthAttribute
{
    private readonly int _maxWords;

    public MaxNameLengthAttributes(int maxWords) : base(maxWords)
    {
        _maxWords = maxWords;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value == null)
            return new ValidationResult("Name required");

        var textValue = value.ToString();

        if (textValue.Length <= _maxWords)
            return ValidationResult.Success;

        var errorMessage = string.Format("max length is {0}",_maxWords);

        return new ValidationResult(errorMessage);
    }
}

enter image description here

Как создать собственное сообщение путем наследованияатрибут по умолчанию и отображать сообщение проверки над текстовым полем вместо всплывающего окна с предупреждением?

Замечания:

Если унаследован атрибут StringLength, предполагается, что он работает нормально без использования IClientValidatable.И сообщение, предположим, не станет всплывающим оповещением, пропущена часть?

1 Ответ

0 голосов
/ 15 октября 2018
 [Remote("MaxNameLengthAttributes", "ControllerName", AdditionalFields = "Id", HttpMethod = "POST", 
      ErrorMessage = "max length is 10")]
 public virtual string Name { get; set; }

Затем вы можете добавить метод в вашем контроллере следующим образом:

    [HttpPost]
    public JsonResult MaxNameLengthAttributes(string Name, long? id)
    {
       if(Name.Length<10)
         return Json(false);
       else 
          return Json(true);
    }

Может быть, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...