无法从 OnPost() 中的 OnGet() 访问我的列表
Cannot access my list from OnGet() in OnPost()
我正在制作一个页面,让未获批准的用户获得批准,以便他们可以登录网站。
这就是页面的样子
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 方法访问用户值
提前谢谢你<333
您需要使用[BindProperty]
,以便在表单posts.Here为an official doc时可以将数据绑定到public List<ApproveUsers> Users { get; set; }
。
[BindProperty]
public List<ApproveUsers> Users { get; set; } = new List<ApproveUsers>();
我正在制作一个页面,让未获批准的用户获得批准,以便他们可以登录网站。 这就是页面的样子
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 方法访问用户值
提前谢谢你<333
您需要使用[BindProperty]
,以便在表单posts.Here为an official doc时可以将数据绑定到public List<ApproveUsers> Users { get; set; }
。
[BindProperty]
public List<ApproveUsers> Users { get; set; } = new List<ApproveUsers>();