0

C# と MVC 3 を独学で学ぼうとしています。

簡単なブログアプリを作って学んでいます。ブログの詳細ページで立ち往生しています。このページには投稿が表示され、問題なく動作します。つまり、投稿と投稿に対するコメントが表示されます。ただし、新しいコメントを追加するためのフォームを追加したいと考えています。

その方法は、ブログとコメント クラスの両方を含むビューモデルを作成することだと思います。その後、コメント コントローラーの create アクションを呼び出すコメント フォームを作成できるはずです。

ただし、「BlogDetailViewModel」タイプのモデルが必要なため、ブログ表示ページが表示されません。これは、「Blog」コントローラーの「詳細」アクションが「BlogDetailViewModel」ではなく「ブログ」モデルをビューに渡しているためだと思います。このエラーを修正するにはどうすればよいですか。

これがこの問題に対処する最善の方法ですか。

以下のすべてのコードを詳しく説明しています。

ブログコントローラー - Details メソッド

public ViewResult Details(int id)
{

    Blog blog = db.Blogs.Find(id);
    return View(blog);
}

ブログ.cs

 public class Blog
    {
        public int BlogID { get; set; }
        public string Title { get; set; }
        public string Writer { get; set; }

        [DataType(DataType.MultilineText)]
        public string Excerpt { get; set; }

        [DataType(DataType.MultilineText)]
        public string Content { get; set; }

        [DataType(DataType.Date)]
        public DateTime PublishDate { get; set; }

        public virtual ICollection<Comment> Comments { get; set; }
    }

コメント.cs

 public class Comment
    {
        public int CommentID { get; set; }
        public string Name { get; set; }

        [DataType(DataType.EmailAddress)]
        public string Email { get; set; }

        [DataType(DataType.MultilineText)]
        public string CommentBody { get; set; }

        public int BlogID { get; set; } 
        public virtual Blog Blog { get; set; }
    }

BlogDetailViewModel.cs

public BlogDetailViewModel
{
    public Blog Blog{ get; set; }
    public Comment comment{ get; set; }
}

ブログの詳細ビュー

@model NPLHBlog.ViewModels.BlogDetailViewModel

@{
    ViewBag.Title = @Model.Blog.Title;
}

....

ブログの詳細ビューからすべてをコメントアウトして、タイトルだけを残そうとしました。しかし、それでもうまくいきません。

どんな助けでも感謝します。

4

2 に答える 2

2

ビューには ViewModel クラスに設定された厳密に型指定されたモデルがありますが、アクションからは Blog オブジェクトのみが返されます。エラーを修正するには、次のいずれかを行います。

  • ブログ オブジェクトを受け入れる新しいビューを作成します。
  • 代わりに Blog オブジェクトを受け入れるようにビューを変更してください。
  • アクションを変更して ViewModel オブジェクトをインスタンス化し、そのオブジェクト (ブログ、コメント) に変数を設定してビューに渡します。

それらはすべて簡単なオプションなので、あなた次第です。

于 2012-06-28T19:23:48.140 に答える
2

コントローラーで渡される型は、ビューView()の型と一致する必要があり@modelます。

public ViewResult Details(int id)
{
    Blog blog = db.Blogs.Find(id);
    BlogDetailViewModel viewModel = new BlogDetailViewModel {Blog = blog, Comment = ""};
    return View(viewModel);
}
于 2012-06-28T19:27:20.080 に答える