C# 引入viewmodel会使应用程序崩溃

C# 引入viewmodel会使应用程序崩溃,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我试着自学C#和MVC3 我通过创建一个简单的博客应用程序来学习。我被困在博客的细节页面。此页面显示文章,工作正常-即显示文章和文章上的评论。但是,我想添加一个表单来添加新的注释 我认为这样做的方法是创建一个包含blog和comment类的viewmodel,然后我应该能够创建一个comment表单,该表单调用comment controller的create操作 但是,当我这样做时,博客显示页面不会显示,因为它需要“BlogDetailViewModel”类型的模型。我猜这是因为“Blog”控

我试着自学C#和MVC3

我通过创建一个简单的博客应用程序来学习。我被困在博客的细节页面。此页面显示文章,工作正常-即显示文章和文章上的评论。但是,我想添加一个表单来添加新的注释

我认为这样做的方法是创建一个包含blog和comment类的viewmodel,然后我应该能够创建一个comment表单,该表单调用comment controller的create操作

但是,当我这样做时,博客显示页面不会显示,因为它需要“BlogDetailViewModel”类型的模型。我猜这是因为“Blog”控制器的“Details”操作将“Blog”模型传递给视图,而不是“blogdailviewmodel”。如何更正此错误

这是处理这个问题的最好办法吗

我将详细说明以下所有代码:

博客控制器-详细信息方法

public ViewResult Details(int id)
{

    Blog blog = db.Blogs.Find(id);
    return View(blog);
}
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; }
    }
BlogDetailViewModel.cs

public BlogDetailViewModel
{
    public Blog Blog{ get; set; }
    public Comment comment{ get; set; }
}
博客详细信息视图

@model NPLHBlog.ViewModels.BlogDetailViewModel

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

我试图在博客详细信息视图之外对所有内容进行评论,只保留标题。然而,即使这样也不行


任何帮助都将不胜感激。

您的视图将强类型模型设置为ViewModel类,但您的操作仅返回一个博客对象。要修复错误,请执行以下操作之一:

  • 创建一个接受博客对象的新视图
  • 修改视图以接受博客对象
  • 修改操作以实例化ViewModel对象,并设置该对象上的变量(博客、评论)以将其传递给视图

所有这些都是简单的选项,因此这取决于您。

您的视图将强类型模型设置为ViewModel类,但您的操作仅返回博客对象。要修复错误,请执行以下操作之一:

  • 创建一个接受博客对象的新视图
  • 修改视图以接受博客对象
  • 修改操作以实例化ViewModel对象,并设置该对象上的变量(博客、评论)以将其传递给视图

所有这些都是简单的选项,因此取决于您。

在控制器中传递给
视图()
的类型必须与视图中的
@model
类型匹配

public ViewResult Details(int id)
{
    Blog blog = db.Blogs.Find(id);
    BlogDetailViewModel viewModel = new BlogDetailViewModel {Blog = blog, Comment = ""};
    return View(viewModel);
}

在控制器中传递给
View()
的类型必须与视图中的
@model
类型匹配

public ViewResult Details(int id)
{
    Blog blog = db.Blogs.Find(id);
    BlogDetailViewModel viewModel = new BlogDetailViewModel {Blog = blog, Comment = ""};
    return View(viewModel);
}