0

在 MVC4 的大量教程中,我从未看到它们将经过身份验证的用户链接到包含属于该用户的数据的表。我在这件事上看得很高,也看得很低,结果都是空的。

以 Note 表为例,每个用户都会在数据库中存储一个 Note。如何获取我的简单课程并将经过身份验证的用户链接到它?下面是我觉得没有结果的情况。

 public class Note
    {
        public int NoteId { get; set; }
        [ForeignKey("UserId")]
        public virtual UserProfile CreatedBy { get; set; } 
        public string Description { get; set; }
    }

任何人都有一个很好的教程链接,或者可以解释我应该如何将经过身份验证的用户(使用 simpleauthentication)链接到 ASP.net MVC4 中的模型?

4

1 回答 1

1

将您的实体更改为:

public class Note
{
    [Key]
    [ForeignKey("UserProfile"), DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int UserId{ get; set; }

    public virtual UserProfile UserProfile { get; set; }

    public string Description { get; set; }
}

然后,在您的 Note 控制器或您创建 Notes 的任何控制器中:

    [Authorize]//Place this on each action or controller class so that can can get User's information
    [HttpGet]
    public ActionResult Create()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Create(CreateViewModel model)
    {
        if (ModelState.IsValid)
        {
            var db = new EfDb();                
            try
            {                   
                var userProfile = db.UserProfiles.Local.SingleOrDefault(u => u.UserName == User.Identity.Name)
                                ?? db.UserProfiles.SingleOrDefault(u => u.UserName == User.Identity.Name);
                if (userProfile != null)
                {
                    var note= new Note
                                        {
                                           UserProfile = userProfile,
                                           Description = model.Description 
                                        };                        
                    db.Notes.Add(note);
                    db.SaveChanges();
                    return RedirectToAction("About", "Home");
                }
            }
            catch (Exception)
            {
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator.");
                throw;
            }
        }            
        return View(model);
    }
于 2013-04-09T16:49:55.437 回答