ASP.NET MVC: для этого объекта не определен конструктор без параметров - PullRequest
162 голосов
/ 31 августа 2009
Server Error in '/' Application.
--------------------------------------------------------------------------------

No parameterless constructor defined for this object. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.

Source Error: 


Line 16:             HttpContext.Current.RewritePath(Request.ApplicationPath, false);
Line 17:             IHttpHandler httpHandler = new MvcHttpHandler();
Line 18:             httpHandler.ProcessRequest(HttpContext.Current);
Line 19:             HttpContext.Current.RewritePath(originalPath, false);
Line 20:         }

Я следил за книгой Стивена Сандерсона « Pro ASP.NET MVC Framework ». На странице 132 в соответствии с рекомендацией автора я загрузил сборку ASP.NET MVC Futures и добавил ее в свой проект MVC. [Примечание: это может быть красная сельдь.]

После этого я больше не мог загружать свой проект. Вышеуказанная ошибка остановила меня холодным.

Мой вопрос , а не , «Не могли бы вы помочь мне исправить мой код?»

Вместо этого я хотел бы знать более широко:

  • Как мне решить эту проблему?
  • Что я должен искать?
  • Какая может быть основная причина?

Кажется, я должен понимать маршрутизацию и контроллеры на более глубоком уровне, чем сейчас.

Ответы [ 25 ]

0 голосов
/ 12 декабря 2015

Скорее всего, в вашем контроллере может быть параметризованный конструктор, и какой бы преобразователь зависимостей вы не использовали, он не сможет разрешить зависимость должным образом. Вам нужно поставить точку останова там, где написан метод разрешения зависимостей, и вы получите точную ошибку во внутреннем исключении.

0 голосов
/ 05 августа 2015

Итак, я получил это сообщение и раньше, когда выполнял вызов ajax. Так что в основном он запрашивает конструктор в этом классе моделей, который вызывается контроллером и не имеет никаких параметров.

Вот пример

public class MyClass{

     public MyClass(){} // so here would be your parameterless constructor

 }
0 голосов
/ 22 июля 2015

Это случилось со мной, и результаты на этой странице были хорошим ресурсом, который привел меня во многих направлениях, но я хотел бы добавить еще одну возможность:

Как указано в других ответах, создание конструктора с параметрами удаляет неявный конструктор без параметров, поэтому вы должны явно ввести его.

Моя проблема заключалась в том, что конструктор с параметрами по умолчанию также вызывал это исключение.

выдает ошибки:

public CustomerWrapper(CustomerDto customer = null){...}

Работает:

public CustomerWrapper(CustomerDto customer){...}
public CustomerWrapper():this(null){}
0 голосов
/ 29 июля 2014

Я добавил DropDownList в свою форму, однако в моем случае он не был (и не должен был быть) отправлен с формой, как это было за пределами <form></form> тегов:

@Html.DropDownList("myField", Model.MyField)

Поскольку модель содержала поле только для отображения, это также вызвало ошибку No parameterless constructor defined for this object, так как поле не было отправлено вообще.

В этом случае я исправил это, добавив привязку исключения:

public ActionResult Foo(int id, int? page, [Bind(Exclude = "MyField")]MyModel model)
0 голосов
/ 13 июня 2014

Эта ошибка началась для меня, когда я добавил новый способ создания класса.

Пример:

    public class myClass
    {
         public string id{ get; set; }
         public List<string> myList{get; set;}

         // error happened after I added this
         public myClass(string id, List<string> lst)
         {
             this.id= id;
             this.myList= lst;
         }
     }

Ошибка была устранена, когда я добавил это изменение, добавив конструктор без параметров. Я считаю, что компилятор создает конструктор без параметров по умолчанию, но если вы добавите свой собственный, то вы должны явно его создать.

    public class myClass
    {
         public string id{ get; set; }
         public List<string> myList{get; set;}

         // error doesn't happen when I add this
         public myClass() { }

         // error happened after I added this, but no longer happens after adding above
         public myClass(string id, List<string> lst)
         {
             this.id= id;
             this.myList= lst;
         }
     }
...