将类型转换为新的selectitemlist的问题

时间:2013-08-23 17:12:44

标签: asp.net-mvc casting type-conversion

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"])

2 个答案:

答案 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”,因为它仅代表一个用户,而不代表用户集合。