2010-05-03 6 views
12

Ich möchte in einer ausgewählten Liste Etiketten den Namen und Nachnamen von Personen eines EF-Modells. Ich habe mit dieser versucht:Wie kann ich zwei Felder in einer SelectList-Textbeschreibung kombinieren?

public ActionResult Insert() 
     { 
      ViewData["accountlist"] = new SelectList(time.Anagrafica_Dipendente.ToList(), "ID_Dipendente", "Surname Name", null);    
      Giustificativi g = new Giustificativi(); 
      return View(g); 
     } 

aber VS gibt einen Fehler, denn es gibt kein Attribut „Nachname Name“ genannt wird. Wie kann ich den Namen und den Nachnamen in der Auswahlliste beschriften?

dank

Antwort

40

Sie so etwas tun könnte:

ViewData["accountlist"] = 
    new SelectList((from s in time.Anagrafica_Dipendente.ToList() select new { 
     ID_Dipendente=s.ID_Dipendente, 
     FullName = s.Surname + " " + s.Name}), 
     "ID_Dipendente", 
     "FullName", 
     null); 
+1

Diese Technik ermöglicht auch die Kombination von Eigenschaften aus verschiedenen verknüpften Objekten. zB 'FullName = s.Parent.Surname + s.Name' – Josh

26

hinzufügen eine neue Eigenschaft time.Anagrafica_Dipendente, die die Verkettung der beiden Eigenschaften darstellen:

public string Fullname 
{ 
    get 
    { 
     return string.Format("{0} {1}", Surname, Name); 
    } 
} 

und dann diese verwenden :

ViewData["accountlist"] = new SelectList(
    time.Anagrafica_Dipendente.ToList(), 
    "ID_Dipendente", 
    "Fullname", 
    null 
); 

Update: Wie von C# 6.0, kann die Eigenschaft mehr werden prägnant geschrieben als:

public string Fullname => string.Format("{0} {1}", Surname, Name); 

Erfahren Sie mehr über die Expression-bodied Eigenschaften here.

+1

Damit das funktioniert, müsste' Fullname' ein Mitglied von 'time.Anagrafica_Dipendente' sein. –

+0

Ja, das ist richtig. Ich hätte das spezifizieren sollen. –

+0

ich kann nicht glauben, dass ich nicht daran denken könnte, mein selbst, einfach und elegant, liebe es! – Ben