2011-03-09 32 views
7

Tengo que agregar una lista de selección a la página de registro. Y quiero guardar el elemento seleccionado en la base de datos. Tengo algo así:No hay ningún elemento ViewData de tipo 'IEnumerable <SelectListItem>' que tenga la clave 'Profession'

En la vista:

<%: Html.DropDownListFor(m => m.Profession, (IEnumerable<SelectListItem>)ViewData["ProfessionList"])%>     
<%: Html.ValidationMessageFor(m => m.Profession)%> 

En la clase de modelo:

Y en el controlador:

ViewData["ProfessionList"] = 
       new SelectList(new[] { "Prof1", "Prof2", "Prof3", "Prof4", "Prof5"} 
       .Select(x => new { value = x, text = x }), 
       "value", "text"); 

Y estoy consiguiendo error: no es un elemento ViewData del tipo 'IEnumerable' que tiene la clave 'Profession'.

¿Qué puedo hacer para que funcione?

+0

Equípelo en "SelectList", ¿por qué lo vas a lanzar en IEnumerable ?? DropDownListFor métodos acepta lista de selección. –

+0

Lo lanzo en "SelectList", pero me sale el mismo error. Creo que está esperando IEnumerable por eso lo estoy usando. – Marta

Respuesta

8

Sólo puede definir SelectList en ves de esa manera:

<%: Html.DropDownListFor(m => m.Profession, new SelectList(new string[] {"Prof1", "Prof2", "Prof3", "Prof4", "Prof5"}, "Prof1"))%> 
       <%: Html.ValidationMessageFor(m => m.Profession)%> 
12

Recomendaría el uso de modelos de vista en lugar de ViewData. Por lo tanto:

public class MyViewModel 
{ 
    [Required] 
    [DisplayName("Profession")] 
    public string Profession { get; set; } 

    public IEnumerable<SelectListItem> ProfessionList { get; set; } 
} 

y en su controlador:

public ActionResult Index() 
{ 
    var professions = new[] { "Prof1", "Prof2", "Prof3", "Prof4", "Prof5" } 
     .Select(x => new SelectListItem { Value = x, Text = x }); 
    var model = new MyViewModel 
    { 
     ProfessionList = new SelectList(professions, "Value", "Text") 
    }; 
    return View(model); 
} 

y en su opinión:

<%: Html.DropDownListFor(m => m.Profession, Model.ProfessionList) %> 
<%: Html.ValidationMessageFor(m => m.Profession) %> 
Cuestiones relacionadas