使用List <string>中的字符串创建DropDownListFor

时间:2016-01-26 20:02:52

标签: c# asp.net asp.net-mvc html.dropdownlistfor

我觉得这应该很简单,但我们在这里找不到解释在MVC中使用dropdownlistfor的指南。

我在类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很新,因为我过去一直使用webforms。有没有人知道这是可能的还是一种显示方式?

谢谢,

1 个答案:

答案 0 :(得分:3)

我建议直接在视图中使用模型,而不是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")