2017-05-23 50 views
0

我想在一个视图中添加两个模型:CommentVM和BlogVM。评论VM - 评论, BlogVM - postDetails。 我尝试通过ajax添加评论到我的数据库,并通过我的两个模型来查看。但是,当我尝试显示我的网页时,我收到错误,我的对象为null(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

你'finalItem'变量只设置值'Blog'和'Comment',而不是'CommentDetails'。 – sleeyuen

+0

为什么在DetailsComment类中有CommentVM对象和CommentVM列表?根据我的理解,你会对特定的帖子有很多评论,是吗? –

+0

是的,我有很多评论到一个职位 – damian17

回答

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 
}; 
+0

var dto2 = db.Comments.Find(x => x.PostId == id2);它的这一行我得到错误:无法将lambda表达式转换为类型对象,因为它不是委托类型 – damian17

+0

好的,那么您的'Find'方法可能只允许对象,并且是用于检索多条记录的错误方法。不知道更多关于您的设置,很难说什么适当的方法来执行此功能。在我们的设置中,我们有一个'IQueryable '对象,它允许我们使用'.Where'和过滤器,比如'x => x.PostId == id2'。 – sleeyuen

+0

感谢您的帮助!我这样做,但它没有奏效。也许是因为我是ASP新手。我只想在我的视图中传递两个模型:一个是帖子详细信息(BlogVM可用),另一个是评论详情(CommentVM它不起作用)。如果您有任何建议或示例,请告诉我。 – damian17

相关问题