asp.net mvc 3 - net - mvc dropdownlistfor no está marcado como requerido pero aún así es requerido
validate dropdownlist mvc (3)
Eso es normal. Los tipos de valor siempre son necesarios. Usted podría hacer su propiedad anulable:
public long? KategoriaWlasnaId { get; set; }
Ahora ya no será necesario y si el usuario no selecciona ningún elemento en el menú desplegable, su valor será null
. Y si quisiera que fuera necesario y personalice el mensaje, puede decorarlo con el atributo Requerido:
[Required]
public long? KategoriaWlasnaId { get; set; }
Tengo una lista desplegable para en el archivo 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)
En mi viewModel tengo la propiedad sin ninguna anotación requerida:
public long KategoriaWlasnaId { get; set; }
Pero el campo sigue siendo obligatorio. En el navegador me sale:
<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>
¿Qué me estoy perdiendo?
Puede modificar el DataAnnotationsModelValidatorProvider
predeterminado para que no se requieran tipos de valor agregando las siguientes líneas a Global.asax.cs
en el método Application_Start:
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new DataAnnotationsModelMetadataValidatorProvider());
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
Si el tipo de datos (uso prolongado) no es obligatorio, esto también funcionará simplemente cambiando largo a cadena
public long KategoriaWlasnaId {get; conjunto; }
cadena pública KategoriaWlasnaId {get; conjunto; }
esto también
público largo? KategoriaWlasnaId {get; conjunto; }
también, si está utilizando anotaciones de datos, también puede usar el atributo Nullable