2012-01-26 2 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이있는 포스트 페이지에 게시물을 표시합니다. 그래서 순간에 내 컨트롤러에서 나는 다음과 같습니다 -보기는 다음을 갖는

 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(); 
     } 

작동하려면 어떻게해야합니까? 당신은 직접 블로그 엔티티가 나는 당신이 단지 하나의 블로그로 모델의 Blog 속성을 설정해야합니다 같은데요

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

답변

1

당신은 BL 대신 포스트 모델에서 블로그에 대한 참조를 추가 할 수 있습니다 (모든 게시물과 첫 번째 게시물 예를 들면, 같은 블로그에 속하는) 알았어.

 

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

안녕하세요. Bogdan 님, 답변을 드리겠습니다. 효과가 있기 때문입니다. Post 클래스의 Blog에 대한 참조를 추가하고 싶지는 않았지만 Blog 클래스의 Post에 대한 참조가 이미 있지만 나중에는 괜찮다고 생각합니다. – Johann

0

에 대한

감사합니다 게시물

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

안녕하세요 archil, 나는 아직도 하나의 블로그, 항상 마지막 하나만 받고 있기 때문에 나는 여전히 그런 문제가 있습니다. 컨트롤러에서 그 루프를 할 수 없다는 느낌이 들지만, 뷰에서 어떻게 해야할지 모르겠다. – Johann

0

게시 할당 할 수 있습니다 여러분의 도움과 시간

+0

안녕하세요, devdigital, 포스트는 인덱스 페이지부터 목록이어야합니다. 그래서 FirstOrDefault()를 얻을 수 없습니다. . 모든 게시물에 대한 블로그 아이디가 필요합니다. – Johann

1

을 당신이 당신의 뷰의 Blog.Title을 사용할 수 있습니다 Post 클래스에 가상 Blog 속성을 추가 한 후.

+0

그래 맞아? public virtual 블로그 Blog {get; 세트; } 나는 그것을했고 지금은 효과가있다. – Johann