2

現在、ブログ用に ViewModel をセットアップしています。

public class PostViewModel
{
    public string Title { get; set; }
    public DateTime DateCreated { get; set; }
    public string Content { get; set; }
    public int CommentCount { get; set; }
    public ICollection<Topic> Topics { get; set; }
    public ICollection<Comment> Comments { get; set; }
}

これはコントローラーで完全に機能します:

private MyDB db = new MyDB();

public ActionResult Index()
{
    var posts = (from p in db.Set<BlogPost>()
                 select new PostViewModel
                 {
                     Title = p.Title,
                     DateCreated = p.DateCreated,
                     Content = p.Content,
                     Topics = p.Topics,
                     Comments = p.Comments,
                     CommentCount = p.Comments.Count
                 }).ToList();

    return View(posts);
}

この 2 つの部分があれば、リストを foreach して、対応するコメントとトピックを含むブログ投稿を生成することができます。ただし、トピックのリストが含まれている側にドロップダウンリストを配置したいと思います。ViewModel と HomeController も変更する必要があると思いますが、その方法がわかりません。

@Html.DropDownListFor(???????)

その後、私の Index.cshtml に入りますが、他のすべてがリストとして入ってくる場合、それをどのように処理するかわかりませんか?

4

1 に答える 1

2

ビューが必要とするすべての必要な情報が含まれるように、ビュー モデルを適応させることができます。投稿のリストとトピックのドロップダウンについて言及しましたね。したがって、それは非常に簡単です:

public class BlogViewModel
{
    public PostViewModel Post { get; set; }

    public string TopicID { get; set; }
    public IEnumerable<SelectListItem> Topics { get; set; }
}

そしてもちろん、バックエンド レイヤーから必要なすべての情報をフェッチし、ビューに渡す適切なビュー モデルを作成するように、コントローラー アクションを調整する必要があります。

public ActionResult Index()
{
    var posts = (from p in db.Set<BlogPost>()
                 select new PostViewModel
                 {
                     Title = p.Title,
                     DateCreated = p.DateCreated,
                     Content = p.Content,
                     Topics = p.Topics,
                     Comments = p.Comments,
                     CommentCount = p.Comments.Count
                 }).ToList();

    IEnumerable<Topic> topics = ... go ahead and fetch the topics you want to show in the ddl

    var blog = new BlogViewModel
    {
        Posts = posts,
        Topics = topics.Select(t => new SelectListItem
        {
            Value = t.ID,
            Text = t.TopicText
        })
    };
    return View(blog);
}

そして最後にビュー:

@model BlogViewModel
...
@Html.DropDownListFor(x => x.TopicID, Model.Topics)

また、投稿をループしたり、何かをしたい場合はModel.Posts、以前に直接使用したビューでModel直接使用するだけですIEnumerable<PostViewModel>

于 2012-04-13T16:21:37.093 に答える