我相信这是相对简单的,我只是碰壁砖墙。我有两个实体类设置如下:
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&gt;)'无法从用法。尝试明确指定类型参数。“
不确定我应该在这做什么..
答案 0 :(得分:3)
循环评论模型:
@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 />
@foreach(var comment in Model.Comment) {
@Html.DisplayFor(x => comment)
}
</fieldset>
答案 1 :(得分:0)
为您的Comment
类创建一个DisplayTemplate,它应该可以正常工作,无需迭代视图引擎为您完成的集合。
根据我的评论,您只需为Comment
课程创建展示广告模板即可:
在视图文件夹中创建一个DisplayTemplates
子文件夹,在其中创建一个名为Comment.cshtml
的新部分视图。您的模板可能如下所示:
@model CodeFirstBlog.ViewModels.Comment
<div class="comment">
@Html.DisplayFor(m => m.DisplayName)
....
</div>
就是这样!如果您需要更好地控制评论的显示方式,那么您可以简单地调整模板以适应。
答案 2 :(得分:0)
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 = Post.Comments;
}
}
你是否为Comment class制作了Html帮助方法?