添加评论 - 一个视图中的两个模型

时间:2017-05-23 17:00:42

标签: asp.net-mvc

我想在一个视图中添加两个模型:CommentVM和BlogVM。 CommentVM - 评论, BlogVM - postDetails。 我尝试通过ajax将注释添加到我的数据库中,然后将我的两个模型传递给view。但是当我尝试显示我的页面时,我收到错误,我的对象为空(commentVM) 下面代码我的控制器 任何消化我做错了什么? 谢谢你的帮助!

// GET: Admin/Blog/kategoria/{name}/post/id
    [ActionName("post")]
    public ActionResult PostDetails(int id)
    {
        //Declare BlogVM
           BlogVM model;
        CommentVM model2;

        int id2;

             using (Db db = new Db())
             {
                 //Get the page
                 BlogDTO dto = db.Blog.Find(id);


                 //Confirm page exist
                 if (dto == null)
                 {
                     return Content("Taka strona nie istnieje!");
                 }

                 //Init BlogVM
                model = new BlogVM(dto);

            id2 = dto.Id;
           // CommentDTO dto2 = db.Comments.Find(x => x.PostId == id2);

            model2 = new CommentVM();
        }

            var finalItem = new DetailsComment
            {
                Blog = model,
                Comment = model2
            };

        return View("PostDetails", finalItem);

    }

编码我的模型:

public class CommentVM
{
    public CommentVM()
    {

    }

    public CommentVM(CommentDTO row)
    {
        Id = row.Id;
        Name = row.Name;
        Body = row.Body;
        PostId = row.PostId;
        CreatedAt = row.CreatedAt;
    }

    public int Id { get; set; }
    [Required]
    [StringLength(50, MinimumLength = 3)]
    public string Name { get; set; }
    [Required]
    [StringLength(50, MinimumLength = 3)]
    public string Body { get; set; }
    public int PostId { get; set; }
    public DateTime CreatedAt { get; set; }

    //public IEnumerable<CommentVM> CommentDetails { get; set; }
}



public class BlogVM
{
    public BlogVM()
    {

    }

    public BlogVM(BlogDTO row)
    {
        Id = row.Id;
        Title = row.Title;
        Slug = row.Slug;
        Body = row.Body;
        CategoryName = row.CategoryName;
        CategoryId = row.CategoryId;
        CreatedAt = row.CreatedAt;
        Sorting = row.Sorting;
        HasSidebar = row.HasSidebar;
    }

    public int Id { get; set; }
    [Required]
    [StringLength(50, MinimumLength = 3)]
    public string Title { get; set; }
    public string Slug { get; set; }
    [Required]
    [StringLength(int.MaxValue, MinimumLength = 3)]
    [AllowHtml]
    public string Body { get; set; }
    public string CategoryName { get; set; }
    [Required]
    public int CategoryId { get; set; }
    public DateTime CreatedAt { get; set; }
    public int Sorting { get; set; }
    public bool HasSidebar { get; set; }

    public IEnumerable<SelectListItem> Categories { get; set; }
}





public class DetailsComment
{
    public BlogVM Blog { get; set; }
    public CommentVM Comment { get; set; }

    public IEnumerable<CommentVM> CommentDetails { get; set; }
}

在我看来

@foreach (var item in Model.CommentDetails)
                {

                    <tr>
                        <td>
                            <div class="ajaxdivtd"></div>
                            @Html.DisplayFor(modelItem => item.Name)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.Body)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.CreatedAt)
                        </td>
                    </tr>
                }

1 个答案:

答案 0 :(得分:0)

如果根据您的评论,每个帖子都有多条评论,那么您需要做什么:

//Declare BlogVM
BlogVM model;
CommentVM model2; //you can probably get rid of this variable since you want multiple comments per post, rather than a single one, but that's up to you
List<CommentVM> commentsModel; //new List object to hold the multiple comments for the post

id2 = dto.Id;
var dto2 = db.Comments.Find(x => x.PostId == id2);
//Convert dto2 from an list/enumerable of CommentDTO to a List<CommentVM>, perhaps via AutoMapper (or other such utility), or even manually via a foreach
commentsModel = YourConversionMethod(dto2);

最后:

var finalItem = new DetailsComment
{
    Blog = model,
    Comment = model2,
    CommentDetails = commentsModel
};