2012-08-24 46 views
8

Por lo tanto, tienen el siguiente (pseudo código):mvc C# html.dropdownlist y viewbag

string selectedvalud = "C"; 
List<SelectListItem> list= new List<SelectListItem>(); 
foreach(var item in mymodelinstance.Codes){ 
    list.Add(new SelectListItem { Text = item.Name, Value = item.Id.Tostring(), Selected = item.Id.ToString() == selectedvalue ? true : false }); 
} 

ViewBag.ListOfCodes = list; 

en mi punto de vista:

<%: Html.DropDownList("Codes", (List<SelectListItem>)ViewBag.ListOfCodes , new { style = "max-width: 600px;" })%> 

ahora, antes de que llegue al punto de vista, la "lista" lo ha llenado con elementos y ha marcado el elemento que ya está seleccionado. pero cuando llega a la vista, ninguna de las opciones está marcada como seleccionada.

mi pregunta es, ¿es posible utilizar una viewbag para pasar los artículos o debería usar un medio diferente? ya que elimina el indicador seleccionado en las opciones si lo uso de esa manera.

+0

¿Puede un punto de interrupción en su controlador y comprobar que al menos un elemento de 'list' ha sido etiquetado como' Selected = true; '? No creo que ViewBag esté jugando con tu lista. – StuartLC

+0

sí lo hice y está marcando la opción correcta. – gdubs

Respuesta

21

Trate de esta manera:

ViewBag.ListOfCodes = new SelectList(mymodelinstance.Codes, "Id", "Name"); 
ViewBag.Codes = "C"; 

y en su opinión:

<%= Html.DropDownList(
    "Codes", 
    (IEnumerable<SelectListItem>)ViewBag.ListOfCodes, 
    new { style = "max-width: 600px;" } 
) %> 

Para que esto puede trabajar, obviamente, debe tener un artículo con id = "C" dentro de su colección, así:

ViewBag.ListOfCodes = new SelectList(new[] 
    { 
     new { Id = "A", Name = "Code A" }, 
     new { Id = "B", Name = "Code B" }, 
     new { Id = "C", Name = "Code C" }, 
    }, "Id", "Name"); 
+0

¿qué parte de esto selecciona "Código C"? – gdubs

+1

Este: 'ViewBag.Codes =" C ";'. Y como en la vista usó Códigos como primer argumento para su ayudante 'DropDownList', elegirá el valor de ViewBag. Obviamente, las cosas podrían haber sido un millón de veces más claras si hubiera usado un modelo de vista y un helper 'DropDownListFor' fuertemente escrito y olvidó ViewBag, que es lo que siempre recomiendo a las personas. –

+0

estoy de acuerdo, yo también lo haría. pero en este escenario, el valor de esta lista se agregará a otro valor de otra lista desplegable que terminará escribiéndose en la instancia. Ojalá fuera modelado de manera diferente ... – gdubs

Cuestiones relacionadas