ASP.NET MVC提交表单时保存当前登录用户名至数据库的方法
当然可以实现!
你用ASP.NET Identity的话,获取当前登录用户信息是很方便的,咱们直接修改你的代码就能完成需求:
第一步:确保实体类有存储用户信息的属性
首先检查你的PRview类,需要添加一个用来存储用户名(或用户ID)的属性,比如:
public class PRview { // 你已有的其他属性... public string Username { get; set; } // 新增这个属性存储用户名 // 如果更推荐存储用户ID(避免用户名修改导致数据不一致),可以加: // public string UserId { get; set; } }
添加后记得通过EF迁移更新数据库表结构哦。
第二步:修改Save方法,赋值当前登录用户信息
在你的Save方法里,提交表单时获取当前登录用户的用户名,然后赋值给PRview对象,再保存到数据库。修改后的代码如下:
[Authorize] // 加上这个特性,确保只有登录用户能提交表单 [HttpPost] public ActionResult Save(PRview prview) { if (!ModelState.IsValid) { var viewModel = new NewPRViewModel { PRview = prview, Currencytypes = _context.Currencytypes.ToList() }; return View("NewPR", viewModel); } // 获取当前登录用户的用户名 var currentUsername = User.Identity.Name; if (prview.Id == 0) { // 新增表单记录时,把用户名赋值给PRview prview.Username = currentUsername; _context.PRviews.Add(prview); } else { var prviewInDb = _context.PRviews.Single(c => c.Id == prview.Id); prviewInDb.SupplierName = prview.SupplierName; prviewInDb.Brand = prview.Brand; prviewInDb.Qty = prview.Qty; prviewInDb.Unitprice = prview.Unitprice; // 如果编辑时也需要更新用户名(比如记录最后修改人),就加上这行;不需要可以去掉 prviewInDb.Username = currentUsername; } _context.SaveChanges(); return RedirectToAction("Index", "PRview"); }
额外提示:存储用户ID更稳妥
如果担心用户名可能被修改,导致表单记录里的用户名和实际用户信息不一致,推荐存储用户ID而不是用户名:
- 在
PRview里添加public string UserId { get; set; } - 引用
Microsoft.AspNet.Identity命名空间 - 赋值时改成:
var currentUserId = User.Identity.GetUserId(); prview.UserId = currentUserId;
这样不管用户怎么修改用户名,你都能通过UserId关联到正确的用户信息~
内容的提问来源于stack exchange,提问作者dwarakesh sparki
相关产品推荐
相关产品推荐

