Как объединить два поля в текстовом описании SelectList? - PullRequest
17 голосов
/ 03 мая 2010

Я хочу поместить в выбранный список ярлыков имя и фамилию человека модели EF. Я пробовал с этим:

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

но VS возвращает ошибку, потому что нет атрибута с именем "фамилия". как я могу указать имя и фамилию в метке списка выбора?

спасибо

Ответы [ 3 ]

47 голосов
/ 03 мая 2010

вы могли бы сделать что-то вроде этого:

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);
29 голосов
/ 03 мая 2010

Добавьте новое свойство к time.Anagrafica_Dipendente, которое будет представлять собой объединение двух свойств:

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

и затем используйте это:

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

Обновление: Начиная с C # 6.0, свойство может быть более кратко записано как:

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

Подробнее о свойствах с выражением тела здесь .

1 голос
/ 13 декабря 2018

Я искал этот ответ, и мой простой способ - добавить атрибут NotMapped, это мой код:

[NotMapped]
public string FullName
   {
     get
       {
         return Name + " " + LastName;
       }
   }

Тогда вы можете использовать обычный способ в контроллере, это мой код, Владелец внешнего ключа, связанного с AspNetUsers

ViewBag.Owner = new SelectList(db.AspNetUsers, "Id", "FullName", product.Owner);
...