Подтвердить что ты не робот

Выпадающий список 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>

Что мне не хватает?

4b9b3361

Ответ 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