簡體   English   中英

返回PartialView時ApplicationUser為null

[英]ApplicationUser is null when returning PartialView

我有一個注釋類,該注釋類在創建時存儲用戶的ID,據我了解,實體框架將此ID映射到用戶。 最初加載視圖時,此方法有效。 但是,當我添加新注釋並出於某種原因返回PartialView時,Author(應用程序用戶)為null,並引發異常。 但是,如果我重新加載頁面,則會顯示新注釋,並顯示正確的ApplicationUser信息。

 public class Comment
{
    public Guid ID { get; set; }
    public string Text { get; set; }


    [Required]
    public string AuthorId { get; set; }

    [ForeignKey("AuthorId")]
    public virtual ApplicationUser Author { get; set; }

    public DateTime DateSubmitted { get; set; }
    public Guid PostID { get; set; }
    public virtual Post Post { get; set; }

}

我使用ViewModel處理視圖上的數據。

 public class CommentViewModel
{
    public string Text { get; set; }
    public Guid PostID { get; set; }
    public List<Comment> CommentList { get; set; }
}

這是我的控制器動作。

 public ActionResult CreateComment(CommentViewModel viewModel)
    {
        if (ModelState.IsValid)
        {
            var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
            var currentUser = manager.FindById(User.Identity.GetUserId());

            var comment = new Comment
            {
                ID = Guid.NewGuid(),
                AuthorId = currentUser.Id,
                DateSubmitted = DateTime.Now,
                PostID = viewModel.PostID,
                Text = viewModel.Text

            };

            Debug.Write("PostID:" + comment.PostID + "Author: " + "Text: " + comment.Text);
            db.Comments.Add(comment);
            db.SaveChanges();
            CommentViewModel model = new CommentViewModel();
            model.CommentList = db.Comments.Where(i => i.PostID == comment.PostID).OrderByDescending(c => c.DateSubmitted).ToList();
            return PartialView(model);

        }
        else
        {
            Debug.Write("not valid");

        }

        return PartialView(viewModel);

    }

此foreach顯示CommentList中的所有評論。 提交新評論時,它在應顯示@ item.Author.Id的行上崩潰。

foreach (var item in Model.CommentList)
    {


        <div class="row">
            <div class="col-sm-1">
                <div class="thumbnail">
                    <img class="img-responsive user-photo" src="https://ssl.gstatic.com/accounts/ui/avatar_2x.png">
                </div><!-- /thumbnail -->
            </div><!-- /col-sm-1 -->

            <div class="col-sm-5">
                <div class="panel panel-default">
                    <div class="panel-heading">
                        <strong>@item.Author.Id</strong>

                        <time class="timeago" datetime="@item.DateSubmitted"></time>

                    </div>
                    <div class="panel-body">
                        @item.Text
                    </div><!-- /panel-body -->
                </div><!-- /panel panel-default -->
            </div><!-- /col-sm-5 -->
        </div>

    }

Comment.Author是虛擬的,因此您需要在保存后顯式加載它。 更改:

model.CommentList = db.Comments.Where(i => i.PostID == comment.PostID).OrderByDescending(c => c.DateSubmitted).ToList();

至:

model.CommentList = db.Comments
    .Include(c => c.Author)
    .Where(i => i.PostID == comment.PostID)
    .OrderByDescending(c => c.DateSubmitted).ToList();

參見https://msdn.microsoft.com/zh-cn/library/gg671236%28v=vs.103%29.aspx#Anchor_1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM