如何在ASP.NET Core Identity个人资料页显示手机号码?
解决ASP.NET Core Identity个人资料页不显示手机号码的问题
问题原因
页面未从当前用户对象中读取手机号码并赋值给绑定的模型属性,而用户名能正常显示是因为框架默认处理了UserName的绑定逻辑。
解决方案步骤
1. 完善后台IndexModel的OnGet方法
打开对应的Index.cshtml.cs文件,在OnGetAsync方法中从当前用户获取手机号,赋值给Input.PhoneNumber:
public async Task<IActionResult> OnGetAsync() { var user = await _userManager.GetUserAsync(User); if (user == null) { return NotFound($"无法加载用户 ID '{_userManager.GetUserId(User)}'."); } // 初始化Input模型并赋值手机号 Input = new InputModel { PhoneNumber = user.PhoneNumber }; // 用户名赋值(如果模型中有Username属性) Username = user.UserName; return Page(); }
2. 确保InputModel包含PhoneNumber属性
确认IndexModel中的InputModel类已定义PhoneNumber属性:
public class InputModel { [Phone] [Display(Name = "手机号码")] public string PhoneNumber { get; set; } }
3. 验证更新逻辑(可选)
如果需要支持手机号更新,完善OnPostAsync方法,确保修改后的手机号能保存到数据库:
public async Task<IActionResult> OnPostAsync() { if (!ModelState.IsValid) { return Page(); } var user = await _userManager.GetUserAsync(User); if (user == null) { return NotFound($"无法加载用户 ID '{_userManager.GetUserId(User)}'."); } if (Input.PhoneNumber != user.PhoneNumber) { var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber); if (!setPhoneResult.Succeeded) { StatusMessage = "意外错误:无法设置手机号码。"; return RedirectToPage(); } } await _signInManager.RefreshSignInAsync(user); StatusMessage = "个人资料已更新"; return RedirectToPage(); }
4. 页面代码无需修改
你提供的Index.cshtml中asp-for="Input.PhoneNumber"的绑定是正确的,后台赋值后页面会自动显示数据库中的手机号。
内容的提问来源于stack exchange,提问作者Jason Morris
相关产品推荐
相关产品推荐

