Что я делаю, так это то, что у меня есть статическая функция в классе, которая возвращает SelectList. Метод принимает значение Enum, которое определяет, какой SelectList возвращать. В View функции DropDownList или DropDownListFor вызывают эту функцию, чтобы получить SelectList.
Статическая функция выглядит так:
class HelperMethods
{
enum LookupType {Users, Companies, States};
public static SelectList CommonSelectList(LookupType type, int? filterValue = null)
//filterValue can be used if the results need to be filtered in some way
var db = new WhateverEntities();
switch (type)
{
case LookupType.Users:
var list = db.Users.OrderBy(u => u.LastName).ToList()
return new SelectList(list, "ID", "FullName")
break;
case LookupType.Companies
var list = db.Companies.OrderBy(u => u.Name).ToList()
return new SelectList(list, "ID", "Name")
break;
//and so on...
}
}
}
И представление содержит это:
@Html.DropDownListFor(m => m.UserID, HelperMethods.CommonSelectList(LookupType.Users))
Таким образом, модели и контроллеру не требуется код для настройки списка выбора для отправки в представление. Это позволяет очень легко повторно использовать SelectList, который уже был настроен. Кроме того, если представлению необходимо выполнить цикл по списку объектов, то эту же функцию можно использовать для получения списка для этого. Это самый простой и удобный способ, который я нашел при этом.