Я хочу добавить пользовательскую проверку в целочисленное поле, допускающее обнуляемость, в MVC Core 2.2. Пока у меня есть две проблемы с его реализацией:
- Пользовательская проверка работает, если набраны только цифры. Я хочу проверить также, когда символ находится между.
- Я получаю стандартное сообщение об ошибке в представлении (которое я не могу изменить), когда я набираю цифру, за которой следуют символы. (Пример: значение '4r' недопустимо для номера страницы.)
Что я уже пробовал:
- Я обновил проект с MVC Core 2.0 до 2.2, чтобы можно было установить SuppressModelStateInvalidFilter в значение true в разделе «Автозагрузка», чтобы отключить поведение по умолчанию.
- Прочитайте документы Microsoft .
- Прочитайте кучу похожих статей о Stackoverflow
- Добавлена пользовательская проверка в мой проект для целочисленного поля.
- Пытался проверить число с помощью 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' недопустимо для номера страницы.)
А пользовательская проверка вызывается только тогда, когда я набираю числа в поле.
Чего я хочу добиться, так это правильной пользовательской проверки поля целого числа, допускающего обнуляемость, и я хочу избавиться от сообщения об ошибке по умолчанию. Как я могу это сделать?
Спасибо!