首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么GetUsersInRoleAsync-方法只在.cshtml中工作?

为什么GetUsersInRoleAsync-方法只在.cshtml中工作?
EN

Stack Overflow用户
提问于 2018-04-30 05:46:55
回答 1查看 1.6K关注 0票数 1

我正在开发一个with应用程序(.NET,而不是mvc和indivudual用户帐户),在这里我需要显示具有相应角色的用户。

有人能解释一下以下代码块之间的区别吗?

不使用Users.cshtml.cs

代码语言:javascript
运行
AI代码解释
复制
public class UsersModel : PageModel
{
    private UserManager<ApplicationUser> _userManager;
    public IList<ApplicationUser> admins { get; set; }

    public UsersModel(ApplicationDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public async void OnGet()
    {
        admins = _userManager.GetUsersInRoleAsync("Admins").Result;
    }
 }

它在加载页面时崩溃并产生错误。

使用Users.cshtml工作

代码语言:javascript
运行
AI代码解释
复制
@page
@model UsersModel
@inject UserManager<ApplicationUser> _userManager
@{
 var admins = _userManager.GetUsersInRoleAsync("Admins").Result;
}

@foreach(var user in @Model.admins)
{
    <h3>@user</h3>
}

因此,在第一个代码块(不工作)中没有语法错误。当我运行代码时,在将这个帖子标记为副本之前,我收到的是'Object reference not set to an instance of an object.,我并不是在寻找关于修复这个特定错误的答案。

我想知道是否有人能告诉我..cshtml版本和..cs版本之间的区别?我想使用.cshtml.cs-版本,因为它更清晰。

编辑1

代码语言:javascript
运行
AI代码解释
复制
// not this
public UserManager<ApplicationUser> _userManager;

// but this
var _userManager serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
EN

回答 1

Stack Overflow用户

发布于 2018-04-30 06:02:19

在cs版本中,_userManager是空的,因为您没有将它作为依赖项注入。

在您指定的剃须刀版本中,要为该对象提供@inject。

您将需要向cs版本中添加一个构造函数,并注入_userManager依赖项,但是您使用的框架就是这样做的。

通常情况下,它看起来如下所示:

代码语言:javascript
运行
AI代码解释
复制
private readonly IUserManager<IApplicationUser> _userManager;

public UsersModel(
    IUserManager<IApplicationUser> userManager) {
    _userManager = userManager;
}

注入的依赖项通常在接口级别工作,而不是在具体类型级别工作。这将避免以后大量的代码重构,如果您需要更改某些具体的实现。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50101879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档