Проверка 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" })
Другие вопросы по тегам