Проверка MVC и HTML5: конфликт с десятичным форматом
У меня есть элемент ввода:
Посмотреть
<input
type="number"
min="0"
max="100"
step="1"
value="@Model.Percentage"
name="Percentage" />
модель
[Required][Range(0.2,10000)][DisplayFormat(DataFormatString = "{0:n2}", ApplyFormatInEditMode = true)]
public decimal? Percentage { get; set; }
Таким образом, тип ввода остается пустым в браузере.
Я могу заставить его, заменив запятую на точку в процентах ToString.
Но тогда DataAnnotations больше не работают.
Также взгляните на визуализированный ввод HTML5 и визуализированный ввод MVC по умолчанию:
<input
class="text-box single-line
input-validation-error"
data-val="true"
data-val-number="The field Percentage must be a number."
data-val-range="The field Percentage must be between 0 and 100."
data-val-range-max="100" data-val-range-min="0"
data-val-required="The field Percentage is mandatory"
id="Percentage" name="Percentage" type="text" value="0,0"
aria-required="true"
aria-invalid="true"
aria-describedby="Percentage-error Percentage-error Percentage-error Percentage-error">
<input type="number"
min="0"
max="100"
step="1"
value="1"
name="Percentage"
aria-invalid="false"
aria-describedby="Percentage-error Percentage-error"
class="valid">
1 ответ
Решение
Вместо этого используйте HTML-помощники MVC:
@Html.TextBoxFor(m => m.Percentage)
Вы можете добавить атрибуты к сгенерированной MVC разметке следующим образом:
@Html.TextBoxFor(m => m.Percentage, new { @type = "number", @step="1", @min = "0", @max = "100" })