2011-01-12 25 views
17

Mi modelo de vista define la propiedad que se debe mostrar como cuadro combinado. definición de la propiedad es:Validación de la selección requerida en DropDownList

[Required] 
public int Processor { get; set; } 

estoy usando para hacer DropDownListFor cuadro combinado:

<%=Html.DropDownListFor(r => r.Processor, Model.Processors, Model.Processor)%> 

Model.Processors contiene IEnumerable<SelectListItem> con un elemento especial define como:

var noSelection = new SelectListItem 
    { 
    Text = String.Empty, 
    Value = "0" 
    }; 

Ahora tengo que añadir validación a mi cuadro combinado para que el usuario debe seleccionar un valor diferente y luego 'noSelección'. Esperaba alguna configuración de RequiredAttribute pero no tiene una configuración de valor predeterminado.

+0

Si no se supone que el usuario seleccione la opción "NOSELECTION" ¿por qué has añadido a la lista de opciones? – Clicktricity

+5

Para obligarlo a hacer la selección. –

+2

Si solo quiere un espacio en blanco como opción inicial, use la sobrecarga de Html.DropDownListPara eso toma una cadena como el valor de solicitud: Html.DropDownListFor (r => r.Processor, Model.Processors, Model.Processor, String.Empty) entonces la validación requerida debería funcionar – Clicktricity

Respuesta

25

¿Qué tal esto:

[Required] 
public int? Processor { get; set; } 

Y luego:

<%= Html.DropDownListFor(
    x => x.Processor, Model.Processors, "-- select processor --" 
) %> 

Y en su acción POST

[HttpPost] 
public ActionResult Index(MyViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // the model is valid => you can safely use model.Processor.Value here: 
     int processor = model.Processor.Value; 
     // TODO: do something with this value 
    } 
    ... 
} 

Y ahora ya no es necesario añadir manualmente el elemento noSelection. Simplemente use la sobrecarga adecuada DropDownListFor.

+1

Bueno, he entendido mal esa sobrecarga. Gracias. –

+5

Esto no valida en el lado del cliente :( –

+0

Esto funciona para mí ... perfecto. Por lo tanto, en lugar de agregar el valor predeterminado directamente al modelo, lo agrega directamente a través de la sobrecarga. – Legends

Cuestiones relacionadas