2012-01-26 18 views
1

私はコードでMVC3のチュートリアルを最初にやっています。基本的に私は3つのテーブル、投稿、コメント、ブログASP.NET MVC3セカンダリテーブルからタイトル名を表示

public class Blog 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public string BloggerName { get; set; } 
    public virtual ICollection<Post> Posts { get; set; } 
} 

public class Comment 
{ 
    public int ID { get; set; } 
    public DateTime DateCreated { get; set; } 
    public string Content { get; set; } 
    public int PostID { get; set; } 
    public Post Post { get; set; } 
} 

public class Post 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public DateTime DateCreated { get; set; } 
    public string Content { get; set; } 
    public int BlogID { get; set; } 
    public ICollection<Comment> Comments { get; set; } 
} 

を持っていると私はするblogidを持っている投稿ページにポストを表示したいです。だから、現時点での私のコントローラで私は、次の持っている: - Viewは、以下を有する

 public ViewResult Index() 
    { 
     PostViewModel model = new PostViewModel(); 
     model.Posts = db.Posts.ToList(); 

     foreach (var item in model.Posts) 
     { 
      model.Blog = db.Blogs.Where(b => b.ID == item.BlogID).FirstOrDefault(); 
     } 

     return View(model); 
    } 

: -

@foreach (var item in Model.Posts) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.Title) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.DateCreated) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Content) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => modelItem.Blog.Title) 
    </td> 
</tr> 

}

は、私が知りたいことを取得する方法です投稿からのブログタイトル。それを動作させるための

  foreach (var item in model.Posts) 
     { 
      model.Blog = db.Blogs.Where(b => b.ID == item.BlogID).FirstOrDefault(); 
     } 

- :私はこれを置き換えるためには何がありますか?あなたが直接

foreach (var post in model.Posts) 
    { 
     post.Blog = db.Blogs.FirstOrDefault(b => b.ID == item.BlogID); 
    } 

答えて

1

ブログの参照をBlの代わりに投稿モデルに追加することができますogId。

 

public class Post 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public DateTime DateCreated { get; set; } 
    public string Content { get; set; } 
    public Blog Blog { get; set; } 
    public ICollection Comments { get; set; } 
} 
 

だからあなたのループはなる:

 

foreach (var item in model.Posts) 
{ 
    item.Blog = db.Blogs.Where(b => b.ID == item.Blog.ID).FirstOrDefault(); 
} 
 
+0

こんにちはボグダン、私は答えとして、これは動作するために与えるつもりです。私はすでにBlogクラスからの投稿への参照があるので、PostクラスのBlogへの参照を追加したくないのですが、現時点では問題ないと思います。 – Johann

0

ため

感謝投稿(たとえば、すべての投稿が同じブログに属する最初の投稿)

var post = model.Posts.FirstOrDefault(); 
model.Blog = post == null ? null : db.Blogs.Where(blog => blog.ID == post.BlogID); 
+0

こんにちはアーチイル、私はまだ1つのブログしか得ていないので、私はまだそのような問題を抱えています。これは常に最後のものです。私はコントローラでそのループを行うことはできないと感じているが、私はビューでそれを行う方法がわからない – Johann

0

私はあなただけの1のブログであることを、モデルのBlogプロパティを設定する必要があることを推測しているに投稿するブログのエンティティを割り当てることができ、あなたの助けと時間

+0

こんにちはdevdigitalは、そのインデックスページ以来、私はFirstOrDefault() 。私はちょうどそのループのときにすべてのポストのためのブログIDが必要です – Johann

1

あなたはあなたの意見にBlog.Titleを使用することができ、あなたのPostクラスに仮想Blogプロパティを追加した後。

+0

はいそうですね?パブリックバーチャルブログブログ{get;セット; }私はそれをやったし、今それは動作します – Johann

関連する問題