0

このモデルをビューに表示するにはどうすればよいですか

public class PostDetailsViewModel
{
    public Post Posts1 { get; set; }
    public IEnumerable<Post> Posts2 { get; set; }
}

見る

@model IEnumerable<forum3.ViewModels.PostDetailsViewModel>
@foreach (var item in Model)
{
   <span>@item.Posts1.Title</span><br />  
   <p>@item.Posts1.Question</p><br /><br />   
}   

コントローラ

  public ViewResult PostDetails(int id)
    {
        PostDetailsViewModel postdetailsviewmodel = new PostDetailsViewModel();
        postdetailsviewmodel.Posts1 = postRepository.Find(id);
        postdetailsviewmodel.Posts2 = postRepository.FindPostByParentIds(id);
        List<PostDetailsViewModel> postDetailsList = new List<PostDetailsViewModel>();
        postDetailsList.Add(postdetailsviewmodel);
        return View(postDetailsList);
    }

答えであるビューにpost2を含めるにはどうすればよいですか?

4

1 に答える 1

1

質問とその回答のリストを表示し、View モデルを次のようにしたいとします。

(読みやすくするために、Post1 を Question に、Posts2 を Answers に変更しました)

public class PostDetailsViewModel
{
    public Post Question { get; set; }
    public List<Post> Answers { get; set; }
}
public class Post
{
    public int ID { set; get; }
    public string Title { set; get; }
}

コントローラーが PostDetailsViewModel のリストを返し、PostDetailsViewModel がタイプ Post の Question プロパティとタイプ List の Answers プロパティを持っていると仮定します。

public ActionResult Posts()
{
  List<PostDetailsViewModel> objVMLsit = new List<PostDetailsViewModel>();
  //add the object to objVMList here   

  return View(objVMLsit);
}

このビューは出力を提供します

@model List<MvcApplication1.Models.PostDetailsViewModel>
@foreach (var item in Model)
{
  <h2>@item.Question.Title</h2><br />  
  foreach (var answer in item.Answers)
  {
        <p>@answer.Title</p>
  }   
}

編集: コントローラー アクション メソッドを見た後、特定の投稿 (質問) とその回答を表示したいと思います。したがって、リストを返すのではなく、アクションからビューに PostViewModel オブジェクトを 1 つ返すだけです。

public ViewResult PostDetails(int id)
{
    PostDetailsViewModel postdetailsviewmodel = new PostDetailsViewModel();
    postdetailsviewmodel.Question= postRepository.Find(id);
    postdetailsviewmodel.Answers= postRepository.FindPostByParentIds(id);
    return View(postdetailsviewmodel);
}

そして、このようにビューを変更します

@model MvcApplication1.Models.PostDetailsViewModel
<h2>@Model.Question.Title</h2><br />  
@foreach (var answer in Model.Answers)
{
   <p>@answer.Title</p>
}
于 2012-04-19T18:44:14.747 に答える