2009-06-28 13 views
6
List<SelectListItem> items = new List<SelectListItem>(); 
if (a) 
{ 
    SelectListItem deliveryItem = new SelectListItem() 
    { 
     Selected = a.selected, 
     Text = "Delivery", 
     Value = "1" 
    }; 

    items.Add(deliveryItem); 
} 

if (b) 
{ 
    SelectListItem pickupItem = new SelectListItem() 
    { 
     Selected = b.selected, 
     Text = "Pickup", 
     Value = "2" 
    }; 

    items.Add(pickupItem); 
} 

SelectList selectList = new SelectList(items); 

ViewData["OrderTypeList"] = selectList; 

Luego de usarlo conMVC SelectList no trabajar

Html.DropDownList("OrderTypeList") 

Renders

<select id="OrderTypeList" name="OrderTypeList"><option>System.Web.Mvc.SelectListItem</option> 
<option>System.Web.Mvc.SelectListItem</option> 
</select> 

¿Por qué no está prestando opciones correctamente?

Respuesta

7

El método constructor que está llamando cuando lo hace:

SelectList selectList = new SelectList(items); 

crea un conjunto de SelectListItems que ellos mismos apuntan a SelectListItems (de ahí el extraño opción ya que simplemente llama a ToString en el objeto). En su lugar establecer la lista a la tecla ViewData directamente

ViewData["OrderTypeList"] = items; 
+0

gracias, resolvió el problema – mamu

0

creo que usted debe tratar de representación con

Html.DropDownList("OrderTypeList", ViewData["OrderTypeList"]) 
+0

Creo que puedo usar eso si tengo una lista de selección en viewdata. Pero aquí estoy tratando de construir selectlist – mamu

1

O bien, podría crear una clase que contendrá la lista de selección y luego regresar a la clase como el modelo de puntos de vista. Creo que es una forma mucho más elegante de hacerlo en lugar de ViewData.

public class MyFormViewModel 
{ 
    public SelectList Friends { get; set; } 
} 

Luego, en su ActionResult

MyFormViewModel fvm = new MyFormViewModel(); 
fvm.Friends = new SelectList(myList, "UserName", "NickName"); 

A continuación, en su opinión

<%= Html.DropDownList("ToUserName", Model.Friends, new { @class = "field" })%> 
7

Usted podría tener también simplemente cambiado la línea de:

SelectList selectList = new SelectList(items); 

a

SelectList selectList = new SelectList(items, "Text", "Value"); 

Esto le dará instrucciones MVC las propiedades que se utilizan como el Text y Value en sus etiquetas de opción.

1

Si mira el Intellisense para las sobrecargas del constructor SelectList, el código SelectList (elementos) debería funcionar, pero no es así. El hecho de que simplemente haga un ToString() en los elementos es, por lo que puedo decir, un error que Microsoft debería corregir. Las respuestas son todas buenas soluciones. Por cierto, si se utiliza el método de suministro "Texto" y "Valor", la respuesta correcta debería ser

SelectList selectList = new SelectList(items, "Value", "Text") 

no

SelectList selectList = new SelectList(items, "Text", "Value") 

Al menos, que coincide con mi experimentación en MVC 3.