2013-07-25 12 views
6

użyciu Visual Studio Express 2012 for Web i Razor, utworzyć listy select:Get adnotację z C# SelectList

List<SelectListItem> list = new List<SelectListItem>(); 
list.Add(new SelectListItem { Text = "Yes", Value = "1" }); 
list.Add(new SelectListItem { Text = "No", Value = "2" }); 

SelectList selectList = new SelectList(list, "Value", "Text", null); 

Później chcę uzyskać tekst powiązany z konkretnym elementem w selectList. Jako początkujących, to myślę, że mogę to zrobić:

selectList.Items[1].Text 

Ale to skutkuje komunikatem „Nie można stosować z indeksowania [] w celu wyrażenia typu«System.Collections.IEnumerable»”

Dzięki.

Odpowiedz

11

Można spróbować:

selectList.Skip(1).First().Text; 

Lub:

selectList.Where(p => p.Value == "2").First().Text; 
+0

Dzięki Francisco. "selectList.Skip (1) .First(). Text;" działało idealnie. Klauzula "Gdzie" działałaby w moim oryginalnym wpisie, ale w rzeczywistości "wartości" są ponumerowane tak samo jak indeks [] (mam tylko numer indeksu). –

+0

Nie ma potrzeby używania obu znaków * .Where (a => b) *, a następnie * .First() *. Po prostu użyj zamiast tego * .First (a => b) *, który działa dokładnie tak samo. –

3

Można przekonwertować go na List, która daje dostęp do indekser

selectList.Items.ToList()[1].Text 
+0

w rzeczywistości to nie działa – GolfWolf

+0

@ w0lf To nie działa w jaki sposób? – James

+0

dla mnie to nie kompiluje; "selectList.Items' nie ma" ToList ". Czy czegoś brakuje? – GolfWolf

0

Spróbuj

selectList.Items.ElementAt(0); 

potrzeba using System.Linq przestrzeni nazw

+0

To nie działa. ElementAt() nie jest członkiem IEnumerable. –

0

Może to jest to, czego szukasz?

selectList.Items.FindByValue("1").Text