【问题标题】:Cannot access my list from OnGet() in OnPost()无法从 OnPost() 中的 OnGet() 访问我的列表
【发布时间】:2021-07-20 14:12:43
【问题描述】:

我正在创建一个页面,未经批准的用户在该页面上获得批准,以便他们可以登录该站点。 这就是页面的外观

The Approve Page

这是我的 PageModel

 public class ApproveModel : PageModel
{
   
    private readonly UserManager<IdentityUser> _userManager;
    public List<ApproveUsers> Users { get; set; } = new List<ApproveUsers>();
    public ApproveModel(UserManager<IdentityUser> userManager)
    {
        _userManager = userManager;
    }

    public class ApproveUsers
    {
        public string UserId { get; set; }

        public bool IsSelected { get; set; }
    }

    public async Task<IActionResult> OnGet()
    {
        foreach (var user in _userManager.Users)
        {
            var approveUsers = new ApproveUsers
            {
                UserId = user.Id,
            };

            if(await _userManager.IsInRoleAsync(user,"Approved"))
            {
                approveUsers.IsSelected = true;
            }
            else
            {
                approveUsers.IsSelected = false;
            }
            Users.Add(approveUsers);
        }

        return Page();
    }
    public async Task<IActionResult> OnPostAsync()
    {
        for (int i = 0; i < Users.Count(); i++)
        {
         var user =  await _userManager.FindByIdAsync(Users[i].UserId);
            IdentityResult result = null;
            if (Users[i].IsSelected && !(await _userManager.IsInRoleAsync(user, "Approved")))
            {
                result = await _userManager.AddToRoleAsync(user, "Approved");
            }
            else {
                continue;
            }     
        }
        return Page();
    }

}

这是我的页面的 html,以 ApproveModel 作为模型

<form method="post">
<div class="card">
    <div class="card-header">
        <h2>Approve users</h2>
    </div>
    <div class="card-body">
        @for(int i =0; i < Model.Users.Count(); i++)
        {
            <div class="form-check m-1">
                <input type="hidden" asp-for="@Model.Users[i].UserId" />
                <input asp-for="@Model.Users[i].IsSelected" class="form-check-input" />
                <label class="form-check-label" asp-for="@Model.Users[i].IsSelected" >
                    @Model.Users[i].UserId
                </label>
            </div>
        }
    </div>
    <div class="card-footer">
        <input type="submit" value="Update" class="btn btn-primary" style="width:auto" />
    </div>
</div>

问题出在 ApproveModel OnPostt 方法中,当我尝试浏览列表时,它的计数为零,这意味着它是空的。我不知道如何从 OnPost 方法中的 OnGet 方法访问用户值

谢谢你提前

【问题讨论】:

    标签: asp.net-core razor razor-pages


    【解决方案1】:

    你需要使用[BindProperty],这样你才能在表单发帖时绑定数据到public List&lt;ApproveUsers&gt; Users { get; set; }。这里是an official doc

    [BindProperty]
    public List<ApproveUsers> Users { get; set; } = new List<ApproveUsers>();
    

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多