我相信这相对简单,我只是不断地碰到砖墙。我有两个像这样设置的实体类:
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public DateTime CreatedDate { get; set; }
public string Content { get; set; }
public string Tags { get; set; }
public ICollection<Comment> Comments { get; set; }
}
public class Comment
{
public int Id { get; set; }
public string DisplayName { get; set; }
public string Email { get; set; }
public DateTime DateCreated { get; set; }
public string Content { get; set; }
public int PostId { get; set; }
public Post Post { get; set; }
}
我像这样设置我的 ViewModel:
public class PostCommentViewModel
{
public Post Post { get; set; }
public IQueryable<Comment> Comment { get; set; }
public PostCommentViewModel(int postId)
{
var db = new BlogContext();
Post = db.Posts.First(x => x.Id == postId);
Comment = db.Comments;
}
}
我让我的控制器这样做:
public ActionResult Details(int id = 0)
{
var viewModel = new PostCommentViewModel(id);
return View(viewModel);
}
然后视图如下所示:
@model CodeFirstBlog.ViewModels.PostCommentViewModel
<fieldset>
<legend>PostCommentViewModel</legend>
@Html.DisplayFor(x => x.Post.Title)
<br />
@Html.DisplayFor(x => x.Post.Content)
<br />
@Html.DisplayFor(x => x.Post.CreatedDate)
<hr />
@Html.DisplayFor(x => x.Comment)
</fieldset>
结果是显示数据,但不是我想要的评论。
您会看到评论(其中有两个)并且仅在每个“12”上显示 id 属性
我怎样才能让它进入并显示特定于该特定帖子的评论详细信息?我想一个 foreach 循环是有序的,但我不知道如何正确钻入 Model.Comment 属性。
我试过这个:
@foreach(var item in Model.Comment)
{
@Html.DisplayFor(item.DisplayName)
@Html.DisplayFor(item.Content)
@Html.DisplayFor(item.DateCreated)
}
但我得到的错误是“方法'System.Web.Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>)'的类型参数不能从用法中推断出来。尝试明确指定类型参数。”
不知道我应该在这里做什么..