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. [Примечание: это может быть красная сельдь.]
После этого я больше не мог загружать свой проект. Вышеуказанная ошибка остановила меня холодно.
Мой вопрос не таков: «Не могли бы вы помочь мне исправить мой код?»
Вместо этого я хотел бы знать более широко:
- Как мне решить эту проблему?
- Что я должен искать?
- Что может быть причиной?
Кажется, я должен понимать маршрутизацию и контроллеры на более глубоком уровне, чем сейчас.
Это также может быть вызвано, если ваша Модель использует SelectList, так как у этого нет конструктора без параметров :
Вам придется реорганизовать свою модель, чтобы сделать это по-другому, если это является причиной. Поэтому, используя
IEnumerable<Contact>
и написав метод расширения, который создает выпадающий список с различными определениями свойств:Или вы можете использовать подход @Mark и @krilovich, просто нужно заменить SelectList на IEnumerable, он также работает с MultiSelectList.
источник
Вам нужно действие, которое соответствует контроллеру, чтобы не иметь параметра.
Похоже на комбинацию контроллер / действие у вас есть:
но тебе нужно
Кроме того, проверьте отладчик маршрута Фила Хаака для устранения неполадок маршрутов.
источник
По умолчанию для контроллеров MVC требуется конструктор по умолчанию без параметров. Простейшим было бы сделать конструктор по умолчанию, который вызывает конструктор с параметрами:
Тем не менее, вы можете переопределить эту функцию, свернув свою собственную
ControllerFactory
. Таким образом , вы можете сказать MVC , что , когда вы создаетеMyController
дать ему экземплярHelper
.Это позволяет вам использовать каркас Dependency Injection с MVC и действительно отделить все. Хороший пример этого закончен на веб-сайте StructureMap . Весь быстрый запуск хорош, и он становится специфичным для MVC в нижней части "Auto Wiring".
источник
Эта ошибка также возникает при использовании IDependencyResolver , например, при использовании контейнера IoC, и преобразователь зависимостей возвращает значение NULL. В этом случае ASP.NET MVC 3 по умолчанию использует DefaultControllerActivator для создания объекта. Если создаваемый объект не имеет общедоступного конструктора без аргументов, то исключение будет выдаваться каждый раз, когда предоставленный преобразователь зависимостей вернул значение null.
Вот одна из таких трассировок стека:
источник
Вы можете получить это исключение во многих различных местах в структуре MVC (например, он не может создать контроллер или не может создать модель для этого контроллера).
Единственный простой способ диагностировать эту проблему - переопределить MVC как можно ближе к исключению с помощью собственного кода. Тогда ваш код сломается внутри Visual Studio, когда возникнет это исключение, и вы сможете прочитать тип, вызывающий проблему, из трассировки стека.
Это кажется ужасным способом решения этой проблемы, но это очень быстро и очень последовательно.
Например, если эта ошибка происходит внутри MVC DefaultModelBinder (которую вы узнаете по проверке трассировки стека), замените DefaultModelBinder следующим кодом:
И обновите ваш Global.asax.cs:
Теперь, когда вы получите это исключение в следующий раз, Visual Studio остановится внутри вашего класса MyDefaultModelBinder, и вы можете проверить свойство «modelType», чтобы увидеть, какой тип вызвал проблему.
Приведенный выше пример работает, когда вы получаете исключение «Для этого объекта не определен конструктор без параметров» только во время привязки модели. Но подобный код может быть написан для других точек расширения в MVC (например, конструкция контроллера).
источник
Я получил ту же ошибку, виновником в моем случае был конструктор, который не был ни публичным, ни частным .
Код репро: убедитесь, что перед конструктором есть public.
источник
Первое видео на http://tekpub.com/conferences/mvcconf
47:10 минут показывает ошибку и показывает, как переопределить стандартную ControllerFactory. Т.е. создать карту структуры контроллера фабрики.
В принципе, вы, вероятно, пытаетесь внедрить внедрение зависимостей ??
Проблема в том, что это зависимость от интерфейса.
источник
Я получил ту же ошибку, когда:
Используя собственный ModelView, оба Действия (GET и POST) передавали ModelView, который содержал два объекта:
И POST также принимает ту же модель:
Проблема заключалась в том, что представление получило ModelView (требуется информация о продукте и списке категорий), но после отправки возвращал только объект Product, но поскольку POST Add ожидал ProductModelView, он передал NULL, но тогда конструктору ProductModelView потребовалось два параметра ( Product, RootCategories), затем он попытался найти другой конструктор без параметров для этого пустого случая, а затем потерпел неудачу с "без параметров ..."
Итак, исправление POST Add следующим образом исправит проблему:
Надеюсь, что это может кому-то помочь (я потратил почти полдня, чтобы выяснить это!).
источник
То же самое для меня. Моя проблема появилась, потому что я забыл, что у моего базового класса уже есть свойство с именем, которое было определено в представлении .
... и модель обработки контроллера:
Ничего особенного, верно? Но тогда я определяю вид ...
... что вызывает ошибку "Конструктор без параметров" при запросе POST.
Надеюсь, это поможет.
источник
У меня была похожая проблема, и в основном дело в том, что в методе действия есть некоторые аргументы, которые не были предоставлены процессом связывания модели (иными словами, эти поля не были отправлены страницей отправки).
Эта проблема возникнет, даже если будут предоставлены все аргументы, кроме одного, и даже если пропущенный аргумент имеет тип NULL.
Проблема также может быть результатом опечатки, в которой имя аргумента и имя поля формы не будут идентичны.
Решение состоит в том, чтобы: 1) убедиться, что имена совпадают, 2) предоставить значение по умолчанию для аргумента 3) или предоставить другой метод действия без этого аргумента.
источник
У меня тоже была эта проблема, и я решил поделиться ею, так как не могу найти свою проблему выше.
Это был мой код
return RedirectToAction("Overview", model.Id);
Вызов этого ActionResult:
public ActionResult Overview(int id)
Я предположил, что это будет достаточно умно, чтобы понять, что значение, которое я передаю, является параметром id для Overview, но это не так. Это исправило это:
return RedirectToAction("Overview", new {id = model.Id});
источник
Я получил то же исключение, потому что не было никакого общественного параметра без параметров
Код был такой:
изменился на
проблема решена для меня.
источник
Все ответы говорят о создании конструктора без параметров, который не идеален, если вы не хотите, чтобы другие разработчики использовали его и только связыватель модели.
Атрибут
[Obsolete("For model binding only", true)]
над открытым конструктором выдаст ошибку компилятора, если другой разработчик попытается использовать это. Мне понадобилось много времени, чтобы найти это, надеюсь, это кому-нибудь поможет.источник
Я получил эту ошибку. Я использовал интерфейсы в своем конструкторе, и мой распознаватель зависимостей не смог разрешить, когда я зарегистрировал его, ошибка исчезла.
источник
У меня такая же проблема...
Если вы используете интерфейс , чтобы разъединить соединение против вашего DbContext (как я) , вы можете использовать structuremap.mvc (3 или 4 - nudget пакет ) , чтобы иметь возможность использовать Constructure в классе контроллера. Это даст вам папку DependencyResolution. Просто измените закомментированную строку с помощью For <InterfaceClass> () и используйте <DbContextClass> ().
источник
Хотя для некоторых это может быть очевидно, виновником этой ошибки для меня было то, что мой метод MVC был привязан к модели, содержащей свойство типа
Tuple<>
.Tuple<>
не имеет конструктора без параметров.источник
У меня была та же проблема, но позже я обнаружил, что добавление любого нового интерфейса и соответствующего класса требует его регистрации в Initializable Module для внедрения зависимостей. В моем случае это было внутри кода следующим образом:
}
источник
В моем случае у моего класса был
[Serializable]
атрибут.Вы должны иметь конструктор, который не принимает параметров, если ваш класс
[Serializable]
источник
Эта ошибка началась для меня, когда я добавил новый способ создания класса.
Пример:
Ошибка была устранена, когда я добавил это изменение, добавив конструктор без параметров. Я считаю, что компилятор создает конструктор без параметров по умолчанию, но если вы добавите свой собственный, вы должны явно его создать.
источник
Я добавил
DropDownList
в свою форму a , однако в моем случае он не был (и не должен был быть) отправлен с формой, как это было за пределами<form></form>
тегов:Поскольку Модель содержала поле только для отображения, это также вызвало
No parameterless constructor defined for this object
ошибку, поскольку поле не было отправлено вообще.В этом случае я исправил это, добавив исключение привязки:
источник
Это случилось со мной, и результаты на этой странице были хорошим ресурсом, который привел меня во многих направлениях, но я хотел бы добавить еще одну возможность:
Как указывалось в других ответах, создание конструктора с параметрами удаляет неявный конструктор без параметров, поэтому вы должны явно ввести его.
Моя проблема заключалась в том, что конструктор с параметрами по умолчанию также вызывал это исключение.
Выдает ошибки:
Работает:
источник
Скорее всего, у вас в контроллере есть параметризованный конструктор, и какой бы преобразователь зависимостей вы не использовали, он не сможет правильно разрешить зависимость. Вам нужно поставить точку останова там, где написан метод разрешения зависимостей, и вы получите точную ошибку во внутреннем исключении.
источник
У меня такая же проблема.
Только что удален
HttpFileCollectionBase files
из аргумента метода Post Action и добавлен какHttpFileCollectionBase files = Request.Files;
в теле метода.источник
Я добавил конструктор без параметров в модель внутри папки DOMAIN, и проблема решена.
источник
Так что я получил это сообщение и раньше, когда делал вызов ajax. Так что в основном он запрашивает конструктор в том классе моделей, который вызывается контроллером и не имеет никаких параметров.
Вот пример
источник