Итак, я внедряю ASP Членство и управление ролями в моем приложении.У меня также есть вторая таблица пользователей со всей информацией, не связанной с членством.Я установил E-mail как имя пользователя в Membership и как внешний ключ в моей таблице User.
Я настраиваю страницу регистрации, чтобы включить раскрывающийся список, чтобы при создании учетной записи можно было выбрать менеджера.Список менеджеров создается путем нахождения всех пользователей Членства с ролью «Менеджер», а затем создания коллекции пользователей, где внешние ключи соответствуют результатам.
List<string> managerNames = new List<string>(Roles.GetUsersInRole("Manager"));
var managers = from m in _db.Users where managerNames.Contains(m.Email) select m;
ViewBag.managers = managers;
Теперь я должен использовать эту коллекцию пользователей, чтобызаполнить раскрывающийся список в моем представлении, в котором для атрибута «Имя» установлено значение «ManagerID» (в соответствии с моей RegistrationModel), значение каждого параметра установлено на первичный ключ пользователя, а отображаемый текст в раскрывающемся списке показывает DisplayName пользователя.модель.
Я могу выполнить утомительную задачу: перебрать мою коллекцию "менеджеров" и заполнить отдельный SelectListItem, затем передать SelectListItem в @Html.DropDown("ManagerID", newSelectListItem)
, но это кажется чрезмерным.Есть ли более прямой (или приемлемый) способ сделать это?
РЕДАКТИРОВАТЬ
Я добавил это в свой контроллер
var selectList = new List<SelectListItem>();
foreach (var manager in managers)
{
selectList.Add(new SelectListItem(){
Value = manager.UserID.ToString(),
Text = manager.DisplayName,
Selected = false
});
}
ViewBag.managers = selectList;
и этона мой взгляд
@Html.DropDownList("ManagerID", (List<SelectListItem>)ViewBag.managers)
и все работает.Это все еще лучший подход?