mvc dropdownlistfor не помечен как необходимый, но все еще требуется - PullRequest
19 голосов
/ 05 сентября 2011

У меня есть раскрывающийся список в файле 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)

В моей модели представления у меня есть свойство без каких-либо аннотаций, как требуется:

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>

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

Ответы [ 3 ]

43 голосов
/ 05 сентября 2011

Это нормально. Типы значений всегда требуются. Вы можете сделать вашу собственность обнуляемой:

public long? KategoriaWlasnaId { get; set; }

Теперь это больше не потребуется, и если пользователь не выберет какой-либо элемент в раскрывающемся списке, его значение будет null. А если вы хотите сделать его обязательным и персонализировать сообщение, вы можете украсить его атрибутом Required:

[Required]
public long? KategoriaWlasnaId { get; set; }
4 голосов
/ 05 сентября 2011

Можно изменить значение по умолчанию DataAnnotationsModelValidatorProvider, чтобы типы значений не требовались, добавив следующие строки в Global.asax.cs в методе Application_Start:

ModelValidatorProviders.Providers.Clear(); 
ModelValidatorProviders.Providers.Add(new DataAnnotationsModelMetadataValidatorProvider());
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
0 голосов
/ 18 апреля 2017

Если тип данных (использовать long) не является обязательным, это также сработает, просто изменив long на string

public long KategoriaWlasnaId {get;задавать;}

открытая строка KategoriaWlasnaId {get;задавать;}

это также

публично долго?KategoriaWlasnaId {get;задавать;}

также, если вы используете аннотации данных, вы также можете использовать атрибут Nullable

...