0

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 查询中获取不属于“管理员”角色的用户列表,并且我试图在 DropDrownList 中显示它们

编辑:视图

@model OG.Models.UserProfiles

然后稍后

@Html.DropDownList("DDLRoles", (SelectList)ViewData["SelectedValue"])

4

2 回答 2

1

第二个参数需要是一个IEnumerable<SelectListItem>,像这样:

@{
    List<UserProfiles> Users = ViewBag.DDLRoles;
}

@Html.DropDownList("Users", Users.Select(x => new SelectListItem() { Text = x.UserName, Value = x.UserName }));
于 2013-08-23T17:35:44.747 回答
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 提交到您的操作。顺便说一句,请为您的模型选择更有意义的名称。您的“UserProfiles”模型应该称为“UserProfile”或“User”,因为它只代表一个用户,而不是一组用户。

于 2013-08-23T18:07:39.673 回答