c# - 在 ASP.NET Core MVC 中修改用户数据
问题描述
我正在尝试实现一个功能,让超级管理员修改常规管理员帐户的数据,但我遇到了“用户安全标记不能为空”的错误。但是在数据库中,填写了 SecurityStamp 字段。
这是我的 Admin 类,它继承自自定义的 ApplicationUser 类,还没有额外的字段。
public abstract class ApplicationUser : IdentityUser<int>
{
//STORED FIELDS
[Required, StringLength(50, MinimumLength = 3), PersonalData]
public string FirstName { get; set; }
[Required, StringLength(50, MinimumLength = 3), PersonalData]
public string LastName { get; set; }
[Required, StringLength(6, MinimumLength = 6), PersonalData]
public string NeptunCode { get; set; }
public int UsernameChangeLimit { get; set; } = 10;
[PersonalData]
public byte[] ProfilePicture { get; set; }
//CALCULATED FIELDS
public string FullName => FirstName + " " + LastName;
}
public class Admin : ApplicationUser
{
}
这是我的 AdminController 和 AdminService 方法。
[HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Modify(int? id, Admin admin)
{
if (id != admin.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
await _adminService.UpdateAdminAsync(admin);
return RedirectToAction(nameof(Index));
}
return View(admin);
}
public async Task<bool> UpdateAdminAsync(Admin admin)
{
await _userManager.UpdateAsync(admin);
return await _context.SaveChangesAsync() == 1;
}
最后,Modify.cshtml
<form asp-action="Modify">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="Id" />
<div class="form-group text-center">
<label asp-for="FirstName" class="control-label"></label>
<input asp-for="FirstName" class="form-control text-center" />
<span asp-validation-for="FirstName" class="text-danger"></span>
</div>
<div class="form-group text-center">
<label asp-for="LastName" class="control-label"></label>
<input asp-for="LastName" class="form-control text-center" />
<span asp-validation-for="LastName" class="text-danger"></span>
</div>
<div class="form-group text-center">
<label asp-for="UserName" class="control-label"></label>
<input asp-for="UserName" class="form-control text-center" />
<span asp-validation-for="UserName" class="text-danger"></span>
</div>
<div class="form-group text-center">
<label asp-for="Email" class="control-label"></label>
<input asp-for="Email" class="form-control text-center" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group form-check text-center">
<label class="form-check-label">
<input class="form-check-input" asp-for="EmailConfirmed" /> @Html.DisplayNameFor(model => model.EmailConfirmed)
</label>
</div>
<div class="form-group text-center">
<label asp-for="NeptunCode" class="control-label"></label>
<input asp-for="NeptunCode" class="form-control text-center" />
<span asp-validation-for="NeptunCode" class="text-danger"></span>
</div>
<div class="form-group text-center">
<label asp-for="PhoneNumber" class="control-label"></label>
<input asp-for="PhoneNumber" class="form-control text-center" />
<span asp-validation-for="PhoneNumber" class="text-danger"></span>
</div>
<div class="form-group form-check text-center">
<label class="form-check-label">
<input class="form-check-input" asp-for="PhoneNumberConfirmed" /> @Html.DisplayNameFor(model => model.PhoneNumberConfirmed)
</label>
</div>
<div class="form-group text-center">
<input type="submit" value="Save" class="btn btn-primary btn-block" />
<a asp-action="Index" class="btn btn-outline-primary btn-block">Back to List</a>
</div>
</form>
谢谢您的帮助!
解决方案
SecurityStamp 是一个必需的字段。您必须在视图表单内的某处为 Model.SecurityStamp 创建一个隐藏输入
<input type="hidden" asp-for="SecurityStamp" value="@Model.SecurityStamp" />
推荐阅读
- android-studio - 在 Linux Mint 上安装 Android Studio 的问题
- javascript - 我使用纱线添加这些 gsap 库,但文件似乎被禁用?这是什么意思?
- php - 从 Vue 应用程序到在 WAMP 上运行的 PHP API 的 axios 的 CORS 问题
- javascript - 在可观察笔记本中创建对象文字失败
- haskell - 惰性状态转换器在 2D 递归中急切地消耗惰性列表
- java - 为什么 String.format 接受 int 代替 %s?
- python - 编写一个名为 randomization 的函数,将一个正整数 n 作为输入,并返回 A,一个随机的 nx 1 Numpy 数组
- pca - 比例数据的主成分分析
- javascript - 如何在 Puppeteer 中刷新页面时等待?
- javascript - 无法理解控制台错误:'Uncaught TypeError: t is not a function'