Пользовательский атрибут проверки для целочисленного поля, допускающего значение NULL, не работает должным образом - PullRequest
0 голосов
/ 06 января 2019

Я хочу добавить пользовательскую проверку в целочисленное поле, допускающее обнуляемость, в MVC Core 2.2. Пока у меня есть две проблемы с его реализацией:

  1. Пользовательская проверка работает, если набраны только цифры. Я хочу проверить также, когда символ находится между.
  2. Я получаю стандартное сообщение об ошибке в представлении (которое я не могу изменить), когда я набираю цифру, за которой следуют символы. (Пример: значение '4r' недопустимо для номера страницы.)

Что я уже пробовал:

  1. Я обновил проект с MVC Core 2.0 до 2.2, чтобы можно было установить SuppressModelStateInvalidFilter в значение true в разделе «Автозагрузка», чтобы отключить поведение по умолчанию.
  2. Прочитайте документы Microsoft .
  3. Прочитайте кучу похожих статей о Stackoverflow
  4. Добавлена ​​пользовательская проверка в мой проект для целочисленного поля.
  5. Пытался проверить число с помощью RegEx, но, как я понял, он работает только для строк.

мое целочисленное поле, которое я хочу проверить

[Display(Name = "Page number")]
[CheckIsNumber(ErrorMessage = "Only numbers please.")] //Custom Validator
[Range(1, 9999, ErrorMessage = "Page number too long.")]
public int? Pagenumber { get; set; }

Мой пользовательский валидатор

public class CustomValidation
    {
    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property, AllowMultiple = false)]
    public sealed class CheckIsNumber : ValidationAttribute
    {
        protected override ValidationResult IsValid(object numbFromTextfield, ValidationContext validationContext)
        {
            if (numbFromTextfield != null)
            {
                string valNumb = numbFromTextfield.ToString();
                bool isNumeric = int.TryParse(valNumb, out int n);

                if (isNumeric)
                {
                    return ValidationResult.Success;
                }
                else
                {
                    return new ValidationResult("Only numbers please.");
                }
            }
            return ValidationResult.Success;
        }
    }
}

Вид

<div class="form-group">
    <label asp-for="Book.Pagenumber"></label>
    <input asp-for="Book.Pagenumber" class="form-control" maxlength="4" />
    <span asp-validation-for="Book.Pagenumber" class="alert-danger"></span>
</div>

// type="number" is also not helpful

Как я описал ранее, я получаю только сообщение об ошибке по умолчанию, когда набираю цифру, за которой следуют символы. ( Пример : значение '4r' недопустимо для номера страницы.)

А пользовательская проверка вызывается только тогда, когда я набираю числа в поле.

Чего я хочу добиться, так это правильной пользовательской проверки поля целого числа, допускающего обнуляемость, и я хочу избавиться от сообщения об ошибке по умолчанию. Как я могу это сделать? Спасибо!

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