2010年の.net MVC3を使用してユーザーを管理する管理セクションを作成しようとしています。ユーザーと役割を別々に管理します。しかし、私は、新しいユーザーを作成したり編集したりするときに役割を追加する方法を理解するのに苦労しています。これは、私の知る限り得ているようです:個々のユーザーの役割をメンバーシップ情報とともに一覧表示、選択、編集するには
私のモデルでは:
public class UserModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
public class IndexViewModel
{
public IEnumerable<UserModel> Users { get; set; }
public IEnumerable<string> Roles { get; set; }
}
私のコントローラで
public ActionResult Index()
{
return View(
new IndexViewModel
{
Users = Membership.GetAllUsers().Cast<MembershipUser>().Select(x => new UserModel
{
UserName = x.UserName,
Email = x.Email,
}),
Roles = Roles.GetAllRoles()
});
}
とビューで:
@model IEnumerable<BBmvc.Areas.Tools.Models.IndexViewModel>
//...
@foreach (var item in Model) {
foreach (var user in item.Users)
{
<tr>
<td>
@Html.DisplayFor(modelItem => user.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => user.Email)
</td>
<td>
@Html.DisplayFor(modelItem => user.Password)
</td>
<td>
@Html.DisplayFor(modelItem => user.ConfirmPassword)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { /* id=user.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details", new { /* id=user.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete", new { /* id=user.PrimaryKey */ })
</td>
</tr>
}
}
私は見ていますこのエラー:
The model item passed into the dictionary is of type 'BBmvc.Areas.Tools.Models.IndexViewModel', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
私は混乱しています。正しい軌道にいるのですか?今私は単にページに表示する役割を取得しようとしています...最終的には、ユーザーごとにフィルタリングする必要があるため、ユーザーの役割だけがリストされます。
編集: 以下の回答は、私が持っていたビューモデルの問題を修正しました。各ユーザーの役割を表示する究極のソリューションは、関与したものではありませんでした。
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@foreach (var role in item.UserRoles)
{
@role
}
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
</td>
</tr>
}
おかげ:ビューで表示され、その後
public ActionResult Index2()
{
var model = Membership.GetAllUsers().Cast<MembershipUser>().Select(x => new UserModel
{
UserName = x.UserName,
Email = x.Email,
UserRoles = Roles.GetRolesForUser(x.UserName)
});
return View(model);
}
そして:コントローラでそれを充填
public IEnumerable<string> UserRoles { get; set; }
:私はUserModelにリストを追加しましたみんな!
あなたのビューには「@モデル」とは何ですか? – DaveShaw
@model IEnumerable –
Rob