У вас не должно быть коллекции SalesPeople в вашей OrderSearchViewModel, поскольку она нарушает принцип единой ответственности.Вы должны переопределить EditorTemplate для SalesPersonId и создать отдельное действие, которое будет отвечать за заполнение раскрывающегося списка.
Вот код из моего приложения, вы можете использовать его в качестве примера.Обратите внимание, что мое свойство CategoryId имеет тип Guid - вам следует заменить Guid?с int?.
Переопределение шаблона с использованием mvcextensions:
public class CreateAccidentCommandMetadata : ModelMetadataConfiguration<CreateAccidentCommand>
{
public CreateAccidentCommandMetadata()
{
Configure(x => x.TrackingNumber)
.Required();
Configure(x => x.CategoryId)
.Required()
.DisplayName("Category")
.Template(MVC.Accident.Views.EditorTemplates.Category);
}
}
Содержимое шаблона:
@model Guid?
@{Html.RenderAction(MVC.Category.List(ViewData.ModelMetadata, Model));}
Действие Category.List:
public virtual ActionResult List(ModelMetadata modelMetadata, Guid? selected)
{
ViewData.Model = queryService.GetList(new GetCategoryListQueryContext())
.Select(x => new SelectListItem
{
Text = x.Name,
Value = x.Id.ToString(),
Selected = selected.HasValue && x.Id == selected
})
.ToList();
//it is important to set up ModelMetadata after model
ViewData.ModelMetadata = modelMetadata;
return View();
}
и довольно простой вид:
@model IEnumerable<SelectListItem>
@Html.DropDownList(ViewData.ModelMetadata.PropertyName, Model)