【发布时间】:2022-12-03 06:04:59
【问题描述】:
我正在使用 .NET Identity 进行身份验证和授权。 对于我的注册页面,我在 InputModel 类中为下拉列表添加了两个 selectListItem 属性。
问题是,当服务器端验证失败时,下拉列表会在页面重新加载时丢失数据。保存其他基本数据。
我查阅了一些关于如何重新填充下拉列表的旧帖子,但仍然无法解决问题。我不知道在调用 return Page() 之后到底执行了什么。
提前致谢。
这是页面模型和方法:
public class InputModel
{
......
[Required]
public string Name { get; set; }
......
[ValidateNever]
public IEnumerable<SelectListItem> RoleList { get; set; }
[ValidateNever]
public IEnumerable<SelectListItem> CompanyList { get; set; }
}
public async Task OnGetAsync(string returnUrl = null)
{
......
......
Input = new InputModel()
{
RoleList = _roleManager.Roles.Select(x => x.Name).Select(i => new SelectListItem
{
Text = i,
Value = i
}),
CompanyList = _unitOfWork.Company.GetAll().Select(i => new SelectListItem
{
Text = i.Name,
Value = i.Id.ToString()
})
};
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
......
if (ModelState.IsValid)
{
var user = CreateUser();
await _userStore.SetUserNameAsync(user, Input.Email, CancellationToken.None);
await _emailStore.SetEmailAsync(user, Input.Email, CancellationToken.None);
user.StreetAddress = Input.StreetAddress;
user.City = Input.City;
user.State = Input.State;
user.PostalCode = Input.PostalCode;
user.Name = Input.Name;
user.PhoneNumber = Input.PhoneNumber;
if(Input.Role == SD.Role_User_Comp)
{
user.CompanyId = Input.CompanyId;
}
var result = await _userManager.CreateAsync(user, Input.Password);
if (result.Succeeded)
{
......
......
}
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
// If we got this far, something failed, redisplay form
return Page();
}
【问题讨论】:
-
您是否尝试返回 RedirectToPage() 而不是 Page()。我担心返回 Page() 会跳过您的 OnGet 方法和您选择的人口。我不知道这将如何影响安全性。
-
你的下拉列表填充了什么数据?
标签: asp.net asp.net-core razor asp.net-identity