我正在尝试自学asp.net.mvc并且我使用MVC的默认模板启动了一个项目。
我稍微更改了模板,因此当使用默认操作方法的寄存器时,我在另一个名为href='u17003I9f1/Prob_Heavy.csv'
的表中添加新注册的用户ID。
基本上,我在前端添加了一个新的文本字段。当用户注册时,他在那里键入一个数字。在后端,我从companies
表中查找公司,该ID与前端的数字相匹配。如果匹配,我想将当前用户ID保存到名为CAId
以下是整个行动方法(我在companies
之后进行了修改):
await
以下是我在上述方法中尝试的内容:
public async Task<ActionResult> RegisterCA(RegisterCAEViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
var currentUser = UserManager.FindByName(user.UserName);
var roleresult = UserManager.AddToRole(currentUser.Id, "CompanyAdministrator");
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
var company = db.Companies.Find(model.CompanyCode);
// find the company by the id passed in the frontend.
if (company!=null)
{
company.CAId = currentUser.Id;
//set the id
db.Entry(company).State = EntityState.Modified;
db.SaveChanges();
}
return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
return View(model);
}
当我注册用户时,我没有收到任何错误。用户已注册,但 var company = db.Companies.Find(model.CompanyCode);
// find the company by the id passed in the frontend.
if (company!=null)
{
company.CAId = currentUser.Id;
//set the id
db.Entry(company).State = EntityState.Modified;
db.SaveChanges();
字段未使用新注册的用户ID更新。
拜托,有人可以帮忙解释一下!我将非常感激,因为我已经坚持了几个小时:(。
答案 0 :(得分:0)
尝试移动此行: company.CAId = currentUser.Id; 行后 db.SaveChanges(); currentauser id是一个标识列,只有在保存到db之后才会设置它。
答案 1 :(得分:0)
对于那些将来会寻找类似问题答案的人 - 我的问题中的代码绝对正常。问题是在视图中我使用的是默认的Register操作方法,而不是上面的修改!感谢所有想要帮助的人!
答案 2 :(得分:-1)
我的猜测,你需要将你的实体附加到集合背后的上下文中 dbSet.Attach(公司)
然后 context.Entry(company).State = EntityState.Modified; db.SaveChanges();