我正在构建一个只有登录用户才能访问的CRUD,我正在尝试向crud记录添加额外信息(userid)。如何获取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...
Here你有更多的细节: