如何将当前登录的用户存储在表中



请耐心等待,我是MVC的新手。我创建了一个名为"Book"的模型,它代表一本教科书,在我的IdentityModel中我添加了以下内容:

public class User : IUser
{
// ...
[Key]
public string Id { get; set; }
public string UserName { get; set; }
// Code First will use this to create a foreign key in book
public virtual ICollection<Book> Uploaders { get; set; }
}

这在我的图书表中创建了一个外键,这正是我想要的。现在,在我的图书控制器中,我只想在用户点击"创建"时将图书链接到用户。这就是我被卡住的地方

//
// POST: /Book/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Book book)
{
    if (ModelState.IsValid)
    {
        // Save uploader here
        // book.Uploader = User.Identity;
        db.Books.Add(book);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(book);
}

关于您的图书模型:

public virtual User User {get;set;}
public int UserId {get;set;}

并将其分配到控制器中。

book.User = User;

当前用户的userId可以在Controller的user属性声明中找到。

假设模型:

public class Book
{
    [Key]
    public int Id { get; set; }
    public virtual BookUser User { get; set; }
    [ForeignKey("User")]
    public string UserId { get; set; }
}

然后,您可以设置UserId:

//
// POST: /Book/Create
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize] // must be authenticated to be able to set UserId
public ActionResult Create(Book book)
{
   if (ModelState.IsValid)
   {
       UserId = ((ClaimsPrincipal)User).FindFirst(c => c.Type == ClaimTypes.NameIdentifier).Value`
       db.Books.Add(book);
       db.SaveChanges();
       return RedirectToAction("Index");
   }
   return View(book);
}

相关内容

  • 没有找到相关文章