Pregunta

Antecedentes:Tengo una ASP.NET MVC ver la página con un MultiSelectList en el Modelo de Vista.Quiero llenar una etiqueta con la lista de SelectedValues de que MultiSelectList objeto.La lista se almacena dentro de la MultiSelectList con un tipo de IDName:

public class IDName {
    public int ID {get; set;}
    public string Name {get; set;}
}

Así MultiSelectList.Los elementos es un IEnumerable que contiene una lista de IDName del.Puedo hacer un foreach sobre esta lista y agarrar .Nombre para obtener el nombre de cada entrada.Pero, yo sólo quiero hacer esto si el IDENTIFICADOR está en MultiSelectList.SelectedItems, que parece ser un string[] y se ve como:

["1", "3", "4"]

Así, sólo quiero llegar a la IDName.Nombre cuando IDName.ID está en la SelectedItems lista.

Soy bastante nuevo para ambos MVC y C#, así que no estoy seguro de que la mejor manera de hacerlo.Alguna sugerencia?

Actualización #2:

OK, yo era denso.Esto funciona:

list.Items
  .Cast<IDName>()
  .Where(x => list.SelectedValues.Cast<string>().Contains(x.ID.ToString()))

SelectedValues es en realidad un IEnumerable que contiene un string[].

¿Fue útil?

Solución

Intente lo siguiente.

var selected = MultiSelectList.Items
  .Cast<IDName>()
  .Where(x => MultiSelectList.SelectedItems.Contains(x.Name));

Lo que esto hace es procesar todos los elementos de la MultiSelectList.Colección de elementos.Entonces, se lanzará a una inflexible IDName instancia.La cláusula where se filtro de la colección a la que sólo los elementos en los que el campo Nombre coincide con una entrada en la SelectedItems matriz.

Otros consejos

Usted puede utilizar LINQ para filtrar list en contra de ids.

list.Where(item => ids.Contains(item.Id.ToString())).Select(item => item.Name)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top