0

私は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; }

}

これにより、Books テーブルに必要な外部キーが作成されました。今私の本のコントローラーでは、「作成」を押したときに本をユーザーにリンクしたいだけです。これは私が立ち往生しているところです

//
// 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);
}
4

2 に答える 2

0

現在のユーザーの 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);
}
于 2013-08-25T13:59:50.200 に答える
0

あなたの本のモデルで:

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

それをコントローラーに割り当てます。

book.User = User;
于 2013-08-24T18:36:48.487 に答える