Создайте DropDownListFor, используя строки из списка‹string›

Я чувствую, что это должно быть просто, но не нашел здесь руководства, объясняющего использование раскрывающегося списка в MVC.

У меня есть простой список имен в методе класса Users:

public List<string> getUsersFullNames()
    {
        return (from da in db.Dat_Account
                join ra in db.Ref_Account on da.AccountID equals ra.AccountID
                select ra.FirstName + " " + ra.Surname).ToList();
    }

Я хочу отобразить каждое из этих имен в раскрывающемся списке, чтобы можно было выбрать имя.

Я пытался заставить это работать, но не добился успеха.

Мой контроллер:

[Authorize]
    public ActionResult ManageUserAccounts()
    {
            ViewBag.UserList = oUsers.getUsersFullNames();
            return View();
    }

Моя модель:

public class ManageUserAccountsViewModel
{
    [Display(Name = "Users")]
    public List<SelectListItem> UserList { get; set; }
}

Мой взгляд:

Html.DropDownListFor(model => model.UserList, new SelectList(oUsers.getUsersFullNames(), "Select User"));

Я новичок в asp.net MVC, так как в прошлом всегда использовал веб-формы. Кто-нибудь знает, возможно ли это или способ показать это?

Спасибо,


person Ben    schedule 26.01.2016    source источник
comment
Вы не можете привязать <select> к List<SelectListItem>. Вашей модели требуется простое свойство для привязки (значение выбранного параметра), например. public string SelectedUser { get; set; }   -  person    schedule 27.01.2016
comment
Не могли бы вы привести пример? Я пытался что-то подобное ранее без везения. Спасибо   -  person Ben    schedule 27.01.2016
comment
Редактирование Трэвиса Шеттлера теперь правильное, за исключением того, что я предлагаю, чтобы public List<string> UserList { get; set; } было public IEnumerable<SelectListItem> UserList { get; set; }, и вы использовали @Html.DropDownListFor(m => m.User, Model.UserList, "Select User"), а атрибут [Display] должен быть на User, а не UserList   -  person    schedule 27.01.2016
comment
Блин, спасибо за помощь   -  person Ben    schedule 27.01.2016
comment
Тогда вам следует подумать о том, чтобы принять ответ Трэвиса :)   -  person    schedule 27.01.2016


Ответы (1)


Я бы рекомендовал использовать модель непосредственно в представлении, а не в ViewBag. Обновите действие, включив в него ссылку на модель:

public ActionResult ManageUserAccounts()
{
    var model = new ManageUserAccountsViewModel();
    model.UserList = oUsers.getUsersFullNames();
    return View(model);
}

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

public class ManageUserAccountsViewModel
{
    public string User { get; set; }

    [Display(Name = "Users")]
    public List<string> UserList { get; set; }
}

Ваше представление должно быть привязано к модели:

@model ManageUserAccountsViewModel

@Html.DropDownListFor(m => m.User, new SelectList(Model.UserList), "Select User")
person Travis Schettler    schedule 26.01.2016
comment
Спасибо за ответ, я попробовал это, но все равно получаю тот же результат, список имен строится нормально, но в представлении ничего не отображается. - person Ben; 27.01.2016
comment
Обновлено с более полным ответом. - person Travis Schettler; 27.01.2016