Почему проверка для десятичного числа не работает для ASP. NET Core 3.1 Razor Pages? - PullRequest
0 голосов
/ 22 февраля 2020

Почему проверка для десятичного числа не работает для ASP. NET Core 3.1 Razor Pages?

Работа на стороне клиента, но после публикации данных я получаю это сообщение проверки на стороне сервера (ModelState.IsValid = false в мое дело). Значение '1.000000' недопустимо для ...

enter image description here

Свойство модели:

[Column(TypeName = "decimal(16, 6)")]
public decimal ValueFactor { get; set; }

Вид:

<input class="form-control" asp-for="@Model.ValueFactor" />
<span asp-validation-for="ValueFactor" class="text-danger"></span>

Ответы [ 3 ]

0 голосов
/ 22 февраля 2020

Попробуйте что-нибудь подобное на стороне сервера.

public class PersonModel
{
    [Required(ErrorMessage = "Required Decimal Number")]
    [RegularExpression(@"^[0-9]+(\.[0-9]{1,100})$", ErrorMessage = "Valid Decimal number with maximum  decimal places.")]
    public string Expenses { get; set; }
}
0 голосов
/ 27 февраля 2020

The thing is in the regional settings of my computer, where the decimal symbol is a comma.

Я нашел решение, дело в региональных настройках моего компьютера, где десятичный символ - запятая. Серверная сторона хочет точку для десятичного разделителя, но моя клиентская сторона хочет запятую, как вы можете видеть на рисунке, поэтому существует несоответствие, для решения которой вам просто нужно изменить тип десятичного символа, как показано на рисунке.

0 голосов
/ 22 февраля 2020

Столбец Атрибут Код Первая аннотация данных

Для проверки десятичного числа вам необходима комбинация регулярных выражений и диапазонов, как показано ниже:

[RegularExpression(@"^\d+\.\d{6}$")]
[Range(0, 9999999999.999999)]

RegularExpression атрибут, указанный выше, будет принимать «любое количество цифр, следующих за точкой (.), А затем 6 цифр». Допускаются следующие числа: 1.000000, 500000.000000 и т. Д.

Атрибут Range принимает число типа десятичное (16,6) в диапазоне от 0 до 9999999999,99999

...