2010-06-01 8 views
5

J'ai ma classe RoomType:Convertir ma liste <Roomtype> en SelectList pour ASP. NET MVC DropDownFor <>, et obtenir les valeurs correctes par option élément

Int32 Id 
String Name 
String ColorCode 

Mon viewmodel obtient une List<Roomtype> RoomTypes qui devrait être affiché dans un menu déroulant. Chaque élément de l'option de liste déroulante doit avoir: 1) le titre Name, 2) la valeur Id, et 3) le style de couleur d'arrière-plan # ColorCode.

Mes problèmes sont de savoir comment convertir cette liste correctement en List<SelectListItem> comme requis par l'assistant DropDownFor d'ASP.NET MVC, puis d'insérer les valeurs correctes pour chaque option.

J'ai essayé d'avoir une nouvelle propriété readonly dans mon viewmodel, qui a un getter RoomtypeSelectList qui renvoie new SelectList(RoomTypeList) mais je n'arrive pas à afficher les propriétés correctes (Name, Id, Background color).

Je vous remercie de l'aide ou des pointeurs dans la bonne direction ...

Répondre

2

les méthodes intégrées d'aide HTML ne vous permet pas de générer un style ou attributs de titre pour les éléments de la liste de sélection.

Si vous souhaitez ajouter ces attributs, vous devez créer vos propres méthodes d'aide html ou simplement afficher manuellement la liste de sélection à l'aide d'un <% foreach ... %>.

9

De l'avis essayer quelque chose comme ça

<%=Html.DropDownList("userList", new SelectList((IEnumerable)ViewData["RoomTypes"], "Value", "Text",selectedValue)) %> 

dans votre action de contrôleur que vous auriez

List<SelectListItem> roomTypesSelect = new List<SelectListItem>(); 

    IList roomTypes = RoomTypeManager.GetAllRoomTypes(); 
    RoomTypes currentRoomType = RoomTypeManager.GetCurrentRoomType(); 
    bool isSelected = false; 
    foreach (RoomTypes roomTypes in roomTypes) 
    { 
    if (currentRoomType.Id == roomTypes.Id) 
     isSelected = true; 
    else 
     isSelected = false; 

    roomTypes.Add(new SelectListItem { Text = roomTypes.Name + " " +roomTypes.ColourCode, Value = roomTypes.Id, Selected = isSelected }); 
    } 

    ViewData["RoomTypes"] = roomTypes; 
+0

Vous avez déclaré roomTypesSelect mais ne semblent rien à faire avec elle? – JsonStatham