我正在构建一个只有登录用户才能访问的 CRUD,并且我正在尝试向 crud 记录添加额外的信息(用户 ID(。 如何获取 userId 并将其与记录一起保存?
这是我的控制器
public ActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "CompanyName,Telephone")]Company company)
{
try
{
if (ModelState.IsValid)
{
db.Companies.Add(company);
db.SaveChanges();
return RedirectToAction("Index");
}
}
catch (DataException /* dex */)
{
ModelState.AddModelError("", "Unable to save changes.");
}
return View(company);
}
这是我的模型
namespace ProjectX.Models
{
public class Company
{
//public int Id { get; set; }
public int CompanyID { get; set; }
public string CompanyName { get; set; }
public string Telephone { get; set; }
}
}
感谢您的帮助!
您可以根据您在代码中的位置以不同的方式访问它,但由于您在控制器中,您应该有一个像这样的扩展方法User.Identity.GetUserId()
;在这种情况下,它将是字符串,但您可以解析它,但请确保您的表AspNetUsers
将 id 作为数据类型int
。假设这是真的,你可以说:
[HttpPost, Authorize]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "CompanyName,Telephone")]Company company)
{
try
{
if (ModelState.IsValid)
{
company.Id = int.Parse(User.Identity.GetUserId());
db.Companies.Add(company);
db.SaveChanges();
return RedirectToAction("Index");
}
}
catch (DataException /* dex */)
{
ModelState.AddModelError("", "Unable to save changes.");
}
return View(company);
}
不要忘记应用[Authorize]
属性。
如果要将用户的更多数据保存到Company
则需要从数据库中获取用户,然后从中提取所需的用户数据,然后将其保存在公司对象中,如下所示:
var user = UserManager.FindById(int.Parse(User.Identity.GetUserId()));
company.Username = user.Username;
//and so on...
在这里,您可以获得更多详细信息: