Вы можете получить это исключение во многих разных местах в инфраструктуре MVC (например, он не может создать контроллер или не может создать модель для предоставления этого контроллера).
Единственный простой способ диагностировать эту проблему - переопределить MVC как можно ближе к исключению с помощью собственного кода. Тогда ваш код сломается внутри Visual Studio, когда возникнет это исключение, и вы сможете прочитать тип, вызывающий проблему, из трассировки стека.
Это кажется ужасным способом решения этой проблемы, но он очень быстрый и очень последовательный.
Например, если эта ошибка происходит внутри MVC DefaultModelBinder (что вы узнаете, проверив трассировку стека), замените DefaultModelBinder следующим кодом:
public class MyDefaultModelBinder : System.Web.Mvc.DefaultModelBinder
{
protected override object CreateModel(System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ModelBindingContext bindingContext, Type modelType)
{
return base.CreateModel(controllerContext, bindingContext, modelType);
}
}
И обновите свой Global.asax.cs:
public class MvcApplication : System.Web.HttpApplication
{
...
protected void Application_Start(object sender, EventArgs e)
{
ModelBinders.Binders.DefaultBinder = new MyDefaultModelBinder();
}
}
Теперь, когда в следующий раз вы получите это исключение, Visual Studio остановится внутри вашего класса MyDefaultModelBinder, и вы можете проверить свойство "modelType", чтобы увидеть, какой тип вызвал проблему.
Приведенный выше пример работает, когда вы получаете исключение «Не определен конструктор без параметров для этого объекта» только во время привязки модели. Но подобный код может быть написан для других точек расширения в MVC (например, конструкция контроллера).