I'm developing a sample application using MVC - a "blog engine". OK, getting rid of all the buzzwords, it is just a few tables: Blogs, Bloggers, Posts. You can add bloggers, create blogs and add posts to a selected blog. Being a good boy, I'm trying not to pass objects like Blog or Post to the view, but rather use ViewModels wherever makes sense. Nothing complicated, for example
public class BlogViewModel { public Blog Blog; public List<Post> Posts; ... public BlogViewModel(Blog blog, List<Post> posts, ... ) { Blog = blog; Posts = posts; ... } }
and then in the BlogController I would have these methods for creating a new blog:
public ActionResult Create() { Blogger selectedBlogger = db.Bloggers.First(); Blog blog = new Blog(); return View(new BlogViewModel(blog, new List<Post>(), ...)); } [HttpPost] public ActionResult Create(BlogViewModel viewModel) { Blog blog = viewModel.Blog; blog.Blogger = db.Bloggers.Where(b => b.BloggerID == viewModel.BloggerID).FirstOrDefault(); if (ModelState.IsValid) { try { db.Blogs.Add(blog); db.SaveChanges(); } // process errors } return View(new BlogViewModel(blog, new List<Post>(), ...)); }
Something like that. So I'm testing the create method when I suddenly recieve the "No parameterless constructor defined for this object" error.
No parameterless constructor defined for this object
That left me scratching my head for some time, because I could not figure out what constructor I'm missing. Took a bit of searching to realise: the constructor is missing in the ViewModel. If I modify the constructor shown above as follows
public class BlogViewModel { public Blog Blog; public List<Post> Posts; ... public BlogViewModel() { } public BlogViewModel(Blog blog, List<Post> posts, List<Blog> blogs, int bloggerid, List<Blogger> bloggers) { Blog = blog; Posts = posts; ... } }
the error just goes away (notice that parameterless constructor that is just sitting there now, happily doing nothing?). Why is that? Well, I'll be totally honest: I have no idea.
Reference
Fun and Struggles with MVC – No Parameterless Constructor Defined by Evgeny. Also posted on my website
1 comment:
You saved my day man,great.Thanks for sharing
Post a Comment