vs'12 asp.net C#MVC4 EF代码首先
控制器中的
var usernames = Roles.GetUsersInRole("Admin");
var adminUsers = db.UserProfiles
.Where(x => !usernames.Contains(x.UserName)).ToList();
List<UserProfiles> myList = adminUsers.ToList();
IEnumerable<UserProfiles> myEnumerable = myList;
ViewBag.DDLRoles = myEnumerable;
进入视图的错误说明
The ViewData item that has the key 'DDLRoles' is of type 'System.Collections.Generic.List'1[[OG.Models.UserProfiles, OG, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' but must be of type 'IEnumerable<SelectListItem>'.
我一直试图将此查询转换为IEnumerable<SelectListItem>
,就像疯了一样,如果有人能帮助我以正确的方式转换它,我会非常感激。
此外,如果我没有说清楚,我正在做的是从linq查询中获取不是“Admin”角色的用户列表,我试图在里面显示它们一个DropDrownList
编辑:视图
@model OG.Models.UserProfiles
然后再
@Html.DropDownList("DDLRoles", (SelectList)ViewData["SelectedValue"])
答案 0 :(得分:1)
第二个参数必须是IEnumerable<SelectListItem>
,如下所示:
@{
List<UserProfiles> Users = ViewBag.DDLRoles;
}
@Html.DropDownList("Users", Users.Select(x => new SelectListItem() { Text = x.UserName, Value = x.UserName }));
答案 1 :(得分:1)
你的观点应该是这样的:
@model OG.Models.UserProfiles
@Html.DropDownListFor(model => model.UserID, new SelectList(ViewBag.DDLRoles, "UserID", "UserName", Model.UserID))
而且,在您的控制器中,您将拥有:
var usernames = Roles.GetUsersInRole("Admin");
var adminUsers = db.UserProfiles
.Where(x => !usernames.Contains(x.UserName)).ToList();
ViewBag.DDLRoles = adminUsers;
这会将所选用户的UserID从DropDownList提交到您的Action。顺便说一句,请为您的模型选择更有意义的名称。您的“UserProfiles”模型应称为“UserProfile”或“User”,因为它仅代表一个用户,而不代表用户集合。