Asp.net mvc 3 如何使用成员信息列出、选择和编辑单个用户的角色
我正在尝试创建一个管理部分来管理VS2010中使用.NETMVC3的用户。我已经了解了如何分别创建和编辑新用户和角色。但是当我创建或编辑一个新用户时,我很难弄清楚如何添加角色。就我所知: 在我的模型中:Asp.net mvc 3 如何使用成员信息列出、选择和编辑单个用户的角色,asp.net-mvc-3,Asp.net Mvc 3,我正在尝试创建一个管理部分来管理VS2010中使用.NETMVC3的用户。我已经了解了如何分别创建和编辑新用户和角色。但是当我创建或编辑一个新用户时,我很难弄清楚如何添加角色。就我所知: 在我的模型中: public class UserModel { [Required] [Display(Name = "User name")] public string UserName { get; set; } [Required] [DataType(Dat
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>
}
}
我看到了这个错误:
传递到字典中的模型项的类型为
“BBmvc.Areas.Tools.Models.IndexViewModel”,但这本字典
需要“System.Collections.Generic.IEnumerable”类型的模型项
我很困惑。我走对了吗?现在我只是想让角色显示在页面上。。。最终,我需要为每个用户筛选这些角色,以便只列出用户所处的角色
编辑:
下面的答案修复了我遇到的viewmodel问题。为每个用户显示角色的最终解决方案并没有那么复杂。我向UserModel添加了一个列表:
public IEnumerable<string> UserRoles { get; set; }
在控制器中填写:
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);
}
然后将其显示在视图中:
@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>
@model BBmvc.Areas.Tools.Models.IndexViewModel
//...
@foreach (var user in Model.Users)
{
<tr>
<td>
@Html.DisplayFor(modelItem => user.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => user.Email)
</td>
<td>
@Html.DisplayFor(modelItem => user.Password)
</td>
<td>
@foreach (var role in Model.Roles.Where(x => x.idUser == user.idUser))
{
<span>@role.Name</span> |
}
</td>
<td>
@Html.ActionLink("ViewRoles", "View Roles", new { id=user.PrimaryKey }) |
@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>
}
}
谢谢大家 您需要更改@model
发件人:@model IEnumerable
收件人:@model BBmvc.Areas.Tools.Models.IndexViewModel
控制器中的代码只是返回IndexViewModel的一个实例,而不是IEnumerable,换句话说,是IndexViewModel的集合/列表/数组/任何对象。当您只返回IndexViewModel类型的一个对象时,您需要将@model更改为@model BBmvc.Areas.Tools.Models.IndexViewModel 由于这个对象包含一个用户和角色列表。。。您需要更改视图:
@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>
@model BBmvc.Areas.Tools.Models.IndexViewModel
//...
@foreach (var user in Model.Users)
{
<tr>
<td>
@Html.DisplayFor(modelItem => user.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => user.Email)
</td>
<td>
@Html.DisplayFor(modelItem => user.Password)
</td>
<td>
@foreach (var role in Model.Roles.Where(x => x.idUser == user.idUser))
{
<span>@role.Name</span> |
}
</td>
<td>
@Html.ActionLink("ViewRoles", "View Roles", new { id=user.PrimaryKey }) |
@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>
}
这样,您就可以拥有用户的角色,单击查看角色或设置角色使用最适合您的问题的链接文本,您就可以拥有该用户的角色列表。在那里,您可以为所选用户添加/编辑/删除角色。视图中的@model是什么?@model IEnumerableth更好。如何从这里开始显示每个用户特定的角色?@Rob,您可以使用一个视图来显示角色,并在此视图中放置另一个链接:'@Html.ActionLinkViewRoles,View roles,new{id=user.PrimaryKey}'。除此之外,您还可以在此表的其他部分包含角色摘要。请参阅更新。我实际上已将角色列表添加到UserModel中: