これは比較的単純なことだと思います。レンガの壁にぶつかり続けているだけです。次のように設定された2つのエンティティクラスがあります。
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>
結果はデータを表示していますが、コメントに必要なものではありません。
コメント (2 つあります) が表示され、それぞれの id プロパティが「12」になっていることがわかります。
この特定の投稿に固有のコメントの詳細に入って表示するにはどうすればよいですか? 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>)' の型引数は、使用法から推測できません。型引数を明示的に指定してみてください。」
ここで何をすべきかわからない..