Выпадающий список mvc не помечен как требуется, но все еще требуется
У меня есть dropdownlistfor в файле cshtml:
var kategorie_wlasna = new SelectList(
(from z in Model.Kategoria
where !formReadOnly || z.Id == Model.KategoriaWlasnaId
select z),
"Id",
"Nazwa");
...
@Html.DropDownListFor(
model => model.KategoriaWlasnaId,
kategorie_wlasna,
"----",
htmlClassDropDownListDef)
В моем представленииModel у меня есть свойство без каких-либо аннотаций как обязательное:
public long KategoriaWlasnaId { get; set; }
Но поле по-прежнему требуется. В браузере я получаю:
<select class="input-validation-error form_object1" data-val="true" data-val-number="The field KategoriaWlasnaId must be a number." data-val-required="The KategoriaWlasnaId field is required." id="KategoriaWlasnaId" name="KategoriaWlasnaId">
<option value="">-----</option>
<option value="1227">Wykroczenie</option>
<option value="1228">Przestępstwo</option>
</select>
Что мне не хватает?
Ответы
Ответ 1
Это нормально. Всегда требуются типы значений. Вы можете сделать свой объект нулевым:
public long? KategoriaWlasnaId { get; set; }
Теперь это больше не потребуется, и если пользователь не выберет какой-либо элемент в выпадающем меню, его значение будет null
. И если вы хотите сделать это необходимым и персонализировать сообщение, вы можете украсить его атрибутом Required:
[Required]
public long? KategoriaWlasnaId { get; set; }
Ответ 2
Вы можете изменить значение по умолчанию DataAnnotationsModelValidatorProvider
, чтобы типы значений не требовались, добавив следующие строки в Global.asax.cs
в методе Application_Start:
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new DataAnnotationsModelMetadataValidatorProvider());
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
Ответ 3
Если тип данных (использовать длинный) не является обязательным, тогда это также будет работать, просто изменив long на строку
public long KategoriaWlasnaId {get; задавать; }
общедоступная строка KategoriaWlasnaId {get; задавать; }
это также
общественный долго? KategoriaWlasnaId {get; задавать; }
также, если вы используете аннотации данных, вы также можете использовать атрибут Nullable