Needtoknowhowtoget/displayuserroles'试图处理由会员提供程序从WebForms转换而来的ASP.Net网站。我现在遇到的问题是如何从另一个表中获取值来填充类中的属性。我有一个名为AppUser.cs的类,它继承自IdentityUser。这基本上映射到使用EntityFramework的名为“AspNetUsers”的表。我使用EF迁移向该表添加了更多属性(第一个/最后一个)。现在,我想显示用户分配的角色,最终我需要获取可用角色列表并将它们添加到下拉列表中。我将RoleName属性添加到我的AppUser类,但我假设是因为该数据未存储在AspNetUsers表中,这就是我收到错误“无效的列名‘RoleName’”的原因。如何在AppUser类中填充角色和/或获取可用角色列表,以便在我的视图中显示它?publicclassAppUser:IdentityUser{publicstringFirstName{get;放;}publicstringLastName{get;放;}publicstringRoleName{get;放;“Index.cshtml”视图上的模型是AppUser。@modelIEnumerable这是我控制器的ActionResult。publicActionResultIndex(){returnView(UserManager.Users);}privateAppUserManagerUserManager{get{returnHttpContext.GetOwinContext().GetUserManager();这是使用Microsoft.AspNet.Identity.Owin的AppUserManager.cs;使用Microsoft.Owin;使用SampleMvcSite.Models;namespaceSampleMvcSite.Infrastructure{publicclassAppUserManager:UserManager{publicAppUserManager(IUserStorestore):base(store){}publicstaticAppUserManagerCreate(IdentityFactoryOptionsoptions,IOwinContextcontext){AppIdentityDbContextdb=context.Get();AppUserManagermanager=newAppUserManager(newUserStore(db));manager.PasswordValidator=newCustomPasswordValidator{RequiredLength=6,RequireNonLetterOrDigit=false,RequireDigit=false,RequireLowercase=true,RequireUppercase=true};manager.UserValidator=newCustomUserValidator(manager){AllowOnlyAlphanumericUserNames=true,RequireUniqueEmail=true};退货经理;}}}更新的代码:我最终创建了一个名为UserEditViewModel的类,我还包括了我正在调整的示例项目中的AppRole类publicclassUserEditViewModel:IdentityUser{publicstringFirstName{get;放;}publicstringLastName{get;放;}publicstringUserRole{get;放;}publicIEnumerableAllRoles{get;放;}}publicclassAppRole:IdentityRole{publicAppRole():base(){}publicAppRole(stringname):base(name){}}然后在我的控制器中执行以下操作。请记住,我一次只允许将一个用户分配给一个角色,因此理论上应该只有一个角色,这就是我只调用userRoles[0]的原因。由于我在一些示例用户之后添加了RoleManager,因此我有一些用户未分配给角色。我添加了一个检查以确保角色有计数,如果没有,我将显示“用户”作为他们的角色。如果没有找到角色,我将返回并添加代码以实际将用户添加到“用户”角色。列出UserList=newList();varusers=UserManager.Users;foreach(用户中的AppUser用户){varuserRoles=awaitUserManager.GetRolesAsync(user.Id);字符串roleName=userRoles.Count()==0?“用户”:用户角色[0];UserEditViewModeleditUser=newUserEditViewModel();editUser.UserName=user.UserName;editUser.FirstName=user.FirstName;editUser.LastName=user.LastName;editUser.Email=user.Email;editUser.UserRole=角色名;editUser.AllRoles=RoleManager.Roles;UserList.Add(editUser);}返回视图(用户列表);这是视图角色:@Html.DisplayNameFor(model=>model.UserRole)我将看一下ViewModel。在视图中更新实体模型通常是不好的做法——尤其是与安全相关的实体。请参阅https://www.stevefenton.co.uk/2013/03/Why-You-Never-Expose-Your-Domain-Model-As-Your-MVC-Model/使用视图模型,您可以拥有列表的属性,此属性可以在控制器中填充并在视图中使用,而另一个属性如RoleId用于用户的角色。在POST中,您可以执行以下操作:if(ModelState.IsValid){varroleMgr=newRoleManager(newRoleStore(context));varuserMgr=newUserManager(newUserStore(context));varrole=roleMgr.FindById(viewmodel.RoleId);if(role!=null)userMgr.AddToRole(viewmodel.UserId,role.Name);}查看:以上是C#学习教程:需要了解如何获取/显示用户角色分享的所有内容,如果有兴趣需要了解更多C#学习教程,希望大家多多指教多加注意——@Html.LabelFor(model=>model.RoleId)@Html.DropDownListFor(model=>model.RoleId,Model.RoleList,htmlAttributes:new{@class="form-control"})@Html.ValidationMessageFor(model=>model.RoleId,"",new{@class="text-danger"})本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
