ASP.NET MVC: No Parameterless Constructor Defined For This Object
Answer :
I just had a similar problem. The same exception occurs when a Model
has no parameterless constructor.
The call stack was figuring a method responsible for creating a new instance of a model.
System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
Here is a sample:
public class MyController : Controller { public ActionResult Action(MyModel model) { } } public class MyModel { public MyModel(IHelper helper) // MVC cannot call that { // ... } public MyModel() // MVC can call that { } }
This can also be caused if your Model is using a SelectList, as this has no parameterless constructor:
public class MyViewModel { public SelectList Contacts { get;set; } }
You'll need to refactor your model to do it a different way if this is the cause. So using an IEnumerable<Contact>
and writing an extension method that creates the drop down list with the different property definitions:
public class MyViewModel { public Contact SelectedContact { get;set; } public IEnumerable<Contact> Contacts { get;set; } } public static MvcHtmlString DropDownListForContacts(this HtmlHelper helper, IEnumerable<Contact> contacts, string name, Contact selectedContact) { // Create a List<SelectListItem>, populate it, return DropDownList(..) }
Or you can use the @Mark and @krilovich approach, just need replace SelectList to IEnumerable, it's works with MultiSelectList too.
public class MyViewModel { public Contact SelectedContact { get;set; } public IEnumerable<SelectListItem> Contacts { get;set; } }
You need the action that corresponds to the controller to not have a parameter.
Looks like for the controller / action combination you have:
public ActionResult Action(int parameter) { }
but you need
public ActionResult Action() { }
Also, check out Phil Haack's Route Debugger to troubleshoot routes.
Comments
Post a Comment