Используемый вами конструктор SelectList
берет имя свойства и использует отражение, чтобы найти именованный элемент.В первом примере вы говорите, что ищите свойство с именем Stf_FirstNameStf_LastName
, которое, как я предполагаю, не существует.
Если вы хотите указать полное имя сотрудника, вам нужно указать это как свойство наStaffs
object.
Если у вас есть контроль над тем, какой тип списка содержит Staffs
, вы можете добавить свойство, подобное этому:
public property string FullName => $"{Stf_FirstName} {Stf_LastName}";
Затем вы можете вызвать SelectList
конструктор с FullName
в качестве свойства отображения:
@Html.DropDownListFor(m => m.Staffs, new SelectList(Model.Staffs, "Id", "FullName"), "", new { @class = "form-control" })
Если он вам недоступен, вы можете создать SelectList
из запроса LINQ, например, в верхней части кода вашей страницы:
@{
var staffList = Model.Staffs.Select(s => new { Value = s.Id, Text = $"{s.Stf_FirstName} {s.Stf_LastName}" });
var staffSelect = new SelectList(staffList, "Value", "Text");
}
Затем создайте свои выпадающие списки, используя этот предварительно созданный SelectList
:
@Html.DropDownListFor(m => m.Staffs, staffSelect, "", new { @class = "form-control" })
Таким образом, вы создаете список один раз, а не несколько раз.Отражение недешево, так что, наверное, лучше все-таки сделать это один раз.