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

2 番目のパラメーターは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」と呼ぶ必要があります。これは、ユーザーのコレクションではなく、1 人のユーザーのみを表すためです。

于 2013-08-23T18:07:39.673 に答える