2011-09-05 19 views
18

Tengo un dropdownlistfor en el archivo cshtml:dropdownlistfor mvc no está marcado como sea necesario, pero aún se requiere

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 modelo de vista tengo la propiedad sin ninguna anotación a su conveniencia:

public long KategoriaWlasnaId { get; set; } 

Pero el campo todavía es 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 falta?

Respuesta

37

Eso es normal. Los tipos de valores siempre son necesarios. Se podría hacer que 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 de su valor será null. Y si usted quiere que sea necesario y personalizar el mensaje que puede decorar con el atributo requerido:

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

muchas gracias partido. He perdido completamente esa solución trivial. – blackik

+0

Gracias. Tiene perfecto sentido que los tipos de valores tengan que ser "requeridos automáticamente", pero también logré caer en este problema. – Moshe

4

Puede modificar el valor predeterminado DataAnnotationsModelValidatorProvider por lo que los tipos de valores no serán requeridos añadiendo 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; 
0

Si el tipo de datos (uso a largo) no es una necesidad, entonces esto también funcionará con sólo cambiar mucho en cadena

KategoriaWlasnaId pública de largo {get; conjunto; }

cadena pública KategoriaWlasnaId {get; conjunto; }

esto también

public long? KategoriaWlasnaId {get; conjunto; }

también si está utilizando anotaciones de datos que puede utilizar el atributo puede anulable, así

Cuestiones relacionadas