2008-12-02 8 views
1

J'ai une SelectList que je vérifie d'abord pour une valeur sélectionnée! = Null, puis je souhaite utiliser cette valeur sélectionnée dans une clause where pour un filtre. Comme si:Impossible de convertir un objet de type WhereListIterator <system.web.Mvc.ListItem> en type system.web.mvc.listitem

if(searchBag.Qualities.SelectedValue != null){ 
    ListItem selected = (ListItem)searchBag.Qualities.SelectedValue; 
} 

J'ai fait la distribution dans une ligne inutile inutile pour localiser le problème. Cela me donne un

Impossible de jeter l'objet de type 'WhereListIterator`1 [System.Web.Mvc.ListItem]' taper 'System.Web.Mvc.ListItem'.

Weuh?

--EDIT--
Il était en effet parce que plusieurs sélections ont été faites. En effet, lors de la création, j'ai défini la valeur sélectionnée sur theItems.Where (i => i.someCriterea) et j'ai oublié de mettre .FirstOrDefault() à la fin. Finissant dans la possibilité de réponses multiples. Puisqu'il s'agissait d'un IEnumerable, c'était une liste paresseuse et par conséquent le WhereListIterator je suppose. Je l'ai résolu en mettant simplement FirstOrDefault à la fin.

Répondre

0

Son déjà été expliqué, mais voici une autre suggestion quant à la façon d'obtenir ce que vous cherchez:

if(searchBag.Qualities.SelectedValue != null){ 
    ListItem selected = (ListItem)searchBag.Qualities.SelectedValue.FirstOrDefault(); 
} 
0

Je suppose que SelectList vous permet de sélectionner plus de 1 élément?

Alors SelectedValue est probablement une liste? Pas 1 liste.

Cast à:

WhereListIterator<ListItem> selected = (WhereListIterator<ListItem>)searchBag.Qualities.SelectedValue; 

au lieu et de voir quelles sont les propriétés que vous avez là.

0

SelectedValue n'est pas un ListItem, c'est la valeur de l'élément de liste sélectionné. Donc, étant donné ceci:

var selectList = new SelectList(companiesList, "Id", "Name", companiesList[3]); 

selectList.SelectedValue sera égal companiesList [3] .id. Si vous voulez que l'élément de la liste réelle que vous pouvez faire quelque chose comme ceci:

ListItem selected = selectList.GetListItems().Where(x => x.Value == selectList.SelectedValue.ToString()) 

Juste curieux, pourquoi voulez-vous l'élément sélectionné dans la liste?

Questions connexes