_userManager.AddToRoleAsync Role XXXdoes not exist.

ASP.NET CORE 使用 Identity框架

使用种子数据,创建完基本的账户和角色,均已成功创建

注册功能的时候,使用 userManager 的 AddToRoleAsync方法,给用户添加一个角色,发现不管是用RoleName还是RoleId,一直报错,角色不存在。

百度好久没找到,后来调试的时候发现 IdentityRole 的NormalizedName字段是空的,后面就给它也赋上值

  var role =
                new IdentityRole { Name = Consts.Admin, NormalizedName = Consts.Admin.ToUpper() };

竟然好了,有点没搞懂,

 

开始只给角色名称赋值了,没想到 NormalizedName 这个字段会影响

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是一个 onClickVolunteerItem 方法,当用户点击志愿表的某个选项时会触发该方法。该方法首先获取用户之前选择的志愿表信息 oldVolunteer,然后判断该志愿表是否已经选择了学校(通过判断 oldVolunteer.collegeData 是否存在)。如果已经选择了学校,则会弹出一个确认框,询问用户是否要替换该学校为当前选中的学校信息(this.collegeData)。如果用户点击确认,则会将当前选中的学校信息设置为该志愿表的学校信息,并清除该学校信息中的 majorsInfo 字段,然后将该志愿表信息保存到 volunteerInfos 中,并清除当前选中志愿表的信息,最后将当前选中志愿表的 key 设置为 key,并将志愿表信息保存到 userManager 中。如果用户点击取消,则不进行任何操作。 如果 oldVolunteer.collegeData 不存在,则说明该志愿表还没有选择学校。此时会判断当前选中的志愿表中是否已经选择了学校(通过判断 this.volunteer.collegeData 是否存在)。如果已经选择了学校,则会将当前选中志愿表的信息保存到 volunteerInfos 中,并将当前选中志愿表的 key 设置为 key,并将志愿表信息保存到 userManager 中。如果当前选中志愿表中也没有选择学校,则直接将当前选中志愿表的 key 设置为 key,并将该志愿表信息保存到 this.volunteer 中。 如果要将替换改为跳转到对应的字母,可以按照以下步骤修改代码: 1. 将 uni.showModal 改为 uni.navigateTo,并将 content 参数改为 url 参数。 2. 在 url 参数中增加一个字母参数,用于指定需要跳转到哪个字母的位置。 3. 在跳转到指定页面的 onLoad 方法中,获取字母参数的值,并将页面滚动到对应字母的位置。 修改后的代码如下: ``` onClickVolunteerItem(key) { const oldVolunteer = this.volunteerInfos[key]; if (oldVolunteer.collegeData) { const url = '/pages/volunteer/volunteer?key=' + key + '&letter=' + this.collegeData.name.charAt(0); uni.navigateTo({ url: url, success: (res) => { console.log('跳转成功'); }, fail: (err) => { console.log('跳转失败', err); } }); } else if (this.volunteer.collegeData) { this.volunteerInfos[this.volunteerKey] = {}; this.volunteerInfos[key] = this.volunteer; this.volunteerKey = key; userManager.setVolunteerInfo(this.volunteerInfos); } else { this.volunteerKey = key; this.volunteer = this.volunteerInfos[key]; } } ``` 在跳转到指定页面的 onLoad 方法中,可以按照以下步骤实现滚动到指定字母的位置: 1. 在 onLoad 方法中获取 letter 参数的值。 2. 使用 uni.createSelectorQuery 获取页面中所有字母元素的位置信息。 3. 根据 letter 参数的值,找到对应的字母元素,并获取其位置信息。 4. 使用 uni.pageScrollTo 方法将页面滚动到该字母元素的位置。 修改后的代码如下: ``` onLoad(options) { const letter = options.letter; uni.createSelectorQuery().selectAll('.letter').boundingClientRect((rects) => { for (let i = 0; i < rects.length; i++) { const rect = rects[i]; if (rect.dataset.letter === letter) { uni.pageScrollTo({ scrollTop: rect.top, duration: 300 }); break; } } }).exec(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值