我正在尝试自学C#和MVC 3.
我正在通过创建一个简单的博客应用程序来学习。我被困在博客的详细页面。此页面显示帖子,它工作正常 - 也就是说,显示帖子和帖子上的评论。但是,我想添加一个表单来添加新评论。
我认为这样做的方法是创建一个包含博客和评论类的视图模型,然后我应该能够创建一个注释表单,该表单调用注释控制器的创建操作。
但是,当我这样做时,博客显示页面不会显示,因为它需要一个类型为“BlogDetailViewModel”的模型。我想这是因为'Blog'控制器的'Details'动作是将'blog'模型传递给视图而不是'BlogDetailViewModel'。如何更正此错误。
这是处理这个问题的最佳方式。
我正在详细说明以下所有代码:
博客控制器 - 详细信息方法
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; }
}
Comment.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;
}
...
我试图通过博客详细信息视图对所有内容进行评论,并保留标题。但是,即使这样也行不通。
任何帮助都会感激不尽。
答案 0 :(得分:2)
您的视图具有设置为ViewModel类的强类型模型,但您只返回操作中的Blog对象。要修复错误,请执行以下操作之一:
所有这些都是简单的选择,因此由您决定。
答案 1 :(得分:2)
传递给控制器中View()
的类型必须与视图中的@model
类型相匹配。
public ViewResult Details(int id)
{
Blog blog = db.Blogs.Find(id);
BlogDetailViewModel viewModel = new BlogDetailViewModel {Blog = blog, Comment = ""};
return View(viewModel);
}