mvc dropdownlistfor is not marked as required but is still required

blackik picture blackik · Sep 5, 2011 · Viewed 11.3k times · Source

I have a dropdownlistfor in cshtml file:

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)

In my viewModel I have the property without any annotations as Required:

public long KategoriaWlasnaId { get; set; }

But the field is still Required. In the browser I get:

<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>

What am I missing?

Answer

Darin Dimitrov picture Darin Dimitrov · Sep 5, 2011

That's normal. Value types are always required. You could make your property nullable:

public long? KategoriaWlasnaId { get; set; }

Now it will no longer be required and if the user doesn't select any element in the dropdown its value will be null. And if you wanted to make it required and personalize the message you could decorate it with the Required attribute:

[Required]
public long? KategoriaWlasnaId { get; set; }