Для данного объекта не определено беспараметрических конструкторов

Обновлено: 28.01.2023

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

вместо этого я хотелось бы знать в более общем плане:

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

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

у меня просто была похожая проблема. То же самое исключение происходит, когда Model не имеет конструктора без параметров.

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

Это также может быть вызвано, если ваша модель использует SelectList,так как это не имеет конструктора без параметров:

вам нужно будет рефакторинг вашей модели, чтобы сделать это по-другому, если это является причиной. Так что с помощью IEnumerable и написание метода расширения, который создает выпадающий список с различными определениями собственность:

или вы можете использовать подход @Mark и @krilovich, просто нужно заменить SelectList на IEnumerable, это работает с MultiSelectList тоже.

вам нужно действие, которое соответствует контроллеру, чтобы не иметь параметра.

похоже, что для комбинации контроллера / действия у вас есть:

а нужно

кроме того, проверьте Фила Хаака Отладчик Маршруту для устранения маршруты.

по умолчанию контроллеры MVC требуют конструктора по умолчанию без параметров. Проще всего было бы сделать конструктор по умолчанию, который вызывает один с параметрами:

тем не менее, вы можете переопределить эту функцию, свернув свой собственный ControllerFactory . Таким образом, вы можете сказать, MVC, что при создании MyController дайте ему экземпляр Helper .

Это позволяет использовать фреймворки инъекций зависимостей с MVC и действительно отделить все. Добро пример этого закончен в сайт StructureMap. Весь быстрый старт хорош, и он становится специфичным для MVC в нижней части "Auto Wiring".

вы можете получить это исключение во многих разных местах в рамках MVC (например, он не может создать контроллер, или он не может создать модель, чтобы дать этот контроллер).

Это похоже ужасный способ подойти к этой проблеме, но это очень быстро, и очень последовательны.

и обновить глобальный.асакс.cs:

теперь в следующий раз, когда вы получите это исключение, Visual Studio остановится внутри вашего класса MyDefaultModelBinder, и вы можете проверить "modelType" свойство, чтобы увидеть, какой тип вызвал проблему.

приведенный выше пример работает, когда вы получаете исключение "no parameterless constructor defined for this object" только во время привязки модели. Но аналогичный код может быть написан для других точек расширения в MVC (например, конструкция контроллера).

Я получил ту же ошибку, виновником в моем случае был конструктор, который не было ни публичным, ни частным.

для этого объекта не определен конструктор без параметров.

Сведения Об Исключении: System.Исключения missingmethodexception: нет конструктора без параметров, определенных для данного объекта.

код повтора: убедитесь, что конструктор имеет public перед ним.

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

. и модель обработки контроллера:

ничего особенного, верно? Но потом я определяю вид .

. что вызывает ошибку "конструктор без параметров" при запросе POST.

надеюсь, что это поможет.

У меня была аналогичная проблема, и в основном дело в том, что в методе действия есть некоторые аргументы, которые не были предоставлены процессом привязки модели (другими словами, эти поля не были представлены на странице отправки).

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

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

решение состоит в том, чтобы 1) проверить, что имена совпадают 2) предоставить значение по умолчанию для аргумента 3) или предоставить другой метод действия без этого аргумента.

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

Это был мой код

return RedirectToAction("Overview", model.Id);

вызов этого ActionResult:

public ActionResult Overview(int id)

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

return RedirectToAction("Overview", new );

Я получил такое же исключение из-за того, что не было parameterless public contructor

код был такой:

изменено на

проблема решена для меня.

У меня была та же проблема.

Если вы используете интерфейс для разъединения вашего соединения с вашим DbContext (как и я), вы можете использовать structuremap.mvc(3 или 4 - nudget package), чтобы иметь возможность использовать конструкцию в вашем классе контроллера. Это даст вам папку DependencyResolution. Просто измените комментируемую строку с помощью For () и используйте().

хотя это может быть очевидно для некоторых, виновником этой ошибки для меня был мой метод MVC был привязан к модели, которая содержала свойство типа Tuple<> . Tuple<> не имеет конструктора без параметров.

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

атрибут [Obsolete("For model binding only", true)] над публичным конструктором появится ошибка компилятора, если другой разработчик попытается использовать это. Мне потребовались годы, чтобы найти это, надеюсь, это поможет кому-то.

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

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

пример:

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

я добавил DropDownList к моей форме, однако в моем случае он не был (и не был предназначен) представлен с формой, как это было за пределами теги:

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

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

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

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

дает ошибки:

работает:

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

У меня была та же проблема, но позже я обнаружил, что добавление любого нового интерфейса и соответствующего класса требует его регистрации в разделе Initializable Module for dependency injection. В моем случае это был внутренний код следующим образом:

>

Пришло время сделать функционал, который позволит добавлять экспонаты в музей юмора.

Содержание

Сразу к делу

Так получилось, что на текущий момент уже практически всё есть, для того чтобы приступить к работе на формой добавления нового экспоната. У меня в контролере при помощи MvcScaffolding сгенерирован метод Create:

Одно небольшое "но". MvcScaffolding сгенерировал все представления (Create, Edit, Delete и т.д.) с использванием модели Exhibit, что совершенно меня не устраивает. Предварительно сохранив только одно представление (Index, потому что в прошлой статье оно уже приобрело правильный внешний вид, а модель на ViewModel я уже поменял), я дал команду Scaffod перегенерировать все представления, но уже с использованием ExhibitViewModel:

После генерации я вернул сохраненный Index назад в проект. Начнем с Create, теперь представление выгшлядит так (уже с ViewModel):

Раз теперь представление "просит" ExhibitViewModel надо поменять методы контроллера на добавление (Create) записи:

Вы навреное уже обратили внимание на строку кода:

Это очередное расширение для класса Exhibit, которое я опять же поместил в файл ModelExtensions:

Представление я пока оставлю как есть, а пока попробую добавить новый экспонат, что называется "с налета", а вдруг всё правильно сгенерировалось и мне тогда останется только "раcкрасить" страницу и "прилепить" обработку меток (tags). Запускаю. Вид ужасный, но зато уже можно выбрать зал (hall) из выпадающего списка для нового экспоната. MVC правильно сгенерировал методы и представления, добавив в на представление ViewBag.PossibleHall:

Так выглядит представление для добавления экспоната:


Попробывал просто нажать снопку Create . Опа! Ошибка:

Для данного объекта не определено беспараметрических конструкторов. (No parameterless constructor defined for this object)

И еще пока не забыл, я в ExhibitViewModel убрал наследование от Humor, а класс просто добавил поле Id:

Лирическое отступление

Поразмыслив о вечном формах отображения, редактирования и создания для сущности Exhibit, я пришел в выводу, что малова-то у меня ViewModel'ов. Почему? При создании и редактировании экспоната большенство его свойств мне не потребуется, например, свойство UpdatedAt. Что же касается меток (Tags), то администратор сайта будет добавлять метки как строку разделенную запятыми, и при создании, и при редактировании экспоната, то есть во ViewModel должно быть специальное поле. А вот для отображения экспоната в списке (Index) или на детализированном представлении (Show), мне потребуются почти все поля (кроме "системных"). Таким образом получается, что для добавления нового экспоната, на форму через ViewModel мне достаточно свойств Title, Content, Tags, причем Tags типа String.

Итак, новый ExhibitViewModel (теперь он базовый для двух других), в нем содержатся свойства, которые потребуются на всех представлениях:

А теперь новый ShowExhibitViewModel (используетя на представлениях Index и Show):

И, наконец, тот самый CreateOrEditExhibitViewModel, который буду использовать при добавлении и редактировании. Пока он выглядит так:

Также мне пришлось изменить метод UpdateFromViewModel - это расширение для класса Exhibit:

Можно теперь переходить к меткам. Как вы наверное обратили внимание, расширение UpdateFromViewModel не содержит какого-либо упоминания о метках, зато CreateOrEditExhibitViewModel содержит свойство Tags типа String. Я создал новый класс-помощник TagsManager, который имеет пока один метод ProcessTags:

Надеюсь из самого метода всё понятно, для чего он нужен. Вкратце: сравнивает два массива строк (названия меток) на предмет изменений. Если экспонат новый - просто возращает все метки как новые, если экспонат редактируется, то тогда проверяет добавленные метки и удаленные, которые соответственно, потом добавляются в БД или удаляются, если этот был последний экспонат помеченный этой меткой.

Использовать этот TagManager я буду в методе Create:

Обратите внимание на выделенный текст, у ViewModel'а есть расширение TagsFromString, которое строку меток преобразует в массив:

Сразу же напишу еще одно расширение TagsToString для меток, которое делает обратное - преобразовывает коллекцию меток в строку через запятую:

Я немно переделал форму регистрации нового экспоната:


Теперь всё готово для добавления. Попробовую добавить новый экспонат. Ура. Получилось как и планировалось. Экспонат добавился, и метки к нему тоже. Единственное, что пришлось писать эти самые метки наугад, то есть нет пока реализации автоподстановки меток. В следующей статье будем делать Autocomplete для выбора меток (Tags). А также займемся редактированием экспоната.

P.S.: я поменял ArrayList на List , потому что в NET Framework 2.0 появились обощенные типы более оптимизированные на скорость работы и размер занимаемой памяти. В частности, List стал приемников ArrayList в новой версии.

Работая с этим сайтом, Вы даете согласие на использование файлов Cookie.

-- Аркадий

Закрыть

Базовый ASP.ект / Отказ от статика

  • Нам придётся отказаться от статичного класса базы данных,
    потому что статичный класс продолжает существование
    даже при новых обращениях к нему с новой страницы.
  • Дата отправки отчёта: 10 марта 2016 г.
  • Задание выполнено: за 30 мин.
  • Чему научился: Я разобрался с проблемой которая возникла в прошлом уроке. Как и описывал ранее сайт работал но пропадало соединение с базой данных. теперь стало понятно почему, статический класс MySQL сохранялся а соединение с ним прерывалось. Так же хочу заметить что деструктор в VStudio 2015 создается без модификатора доступа private. Теперь работает сайт и надеюсь падать не будет.
  • Что было сложным: найти свои ошибки.
  • Комментарии: нет
  • Оценка видео-уроку:






Отчёт от 1101 за Базовый ASP.ект / Отказ от статика

Оцени работу

А вот тут тоже произошла ошибка. При добавлении истории, выкидывает ошибку "Для данного объекта не определено беспараметрических конструкторов."

Ошибка сервера в приложении '/'.

Для данного объекта не определено беспараметрических конструкторов.

Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.

Сведения об исключении: System.MissingMethodException: Для данного объекта не определено беспараметрических конструкторов.

Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений.

Работая с этим сайтом, Вы даете согласие на использование файлов Cookie.

Закрыть

Видеокурсы

Дата активности Видеокурс Прогресс
2017-05-19 jquery Знакомство с jQuery 25 %
2017-05-15 aspnet Базовый ASP.ект 96 %
2017-04-12 tinklavimas Tinklavimas 4 %
2016-10-27 java2 Игры на JavaScript 91 %
2016-10-18 soft0 Демо софт 15 %
Итого: 44 %

Консольные задачи

Все верно, над оформлением предстоит поработать. Торопился закончить механику. :)

Все верно, над оформлением предстоит поработать. Торопился закончить механику. :)

Молодец, отлично поработал, практика наше всё! =)

Буквы я бы светлыми сделал, если фон такой =)

Какие то мрачный тона

Терпения и настойчивости!

Поздравляю с финалом! Молодец! =)

Молодец, Alex! Отличная презентация! Поздравляю с финалом!

Евгений, а знаете, разобрался! :)

Есть 2 ошибки в коде.
1я - отсутствие конструктора по умолчанию в модели Story: Story()<>
без него не инициализируется post возвращаемый представлением add.cshtml в storyController.add(Story post).
Решение: Добавляем.

2я вытекает из предидущей. Добавляя Story()<> , без инициализации sql
(дабы не нагружать сервер лишним в случае post подключением),
при приравнивании в
storyController.add(Story post)
<.
story = post;
. >
- story.sql равна null.
Решение: передаем только значимые поля
story.title = post.title;
story.story = post.story;
story.email = post.email;

Эх, многому можно у вас, настоящего педагога, поучиться.. Спасибо. :)))

Эх, многому можно у вас, настоящего педагога, поучиться.. Спасибо. :)))

Я в восторге от твоих возможностей самостоятельно находить ошибки!

Евгений, а знаете, разобрался! :)

Есть 2 ошибки в коде.
1я - отсутствие конструктора по умолчанию в модели Story: Story()<>
без него не инициализируется post возвращаемый представлением add.cshtml в storyController.add(Story post).
Решение: Добавляем.

2я вытекает из предидущей. Добавляя Story()<> , без инициализации sql
(дабы не нагружать сервер лишним в случае post подключением),
при приравнивании в
storyController.add(Story post)
<.
story = post;
. >
- story.sql равна null.
Решение: передаем только значимые поля
story.title = post.title;
story.story = post.story;
story.email = post.email;

Боюсь, что сейчас нет.
Напиши Валере - 791, попроси его связаться по скайпу или тимке и помочь.

Евгений, а по базовому аспекту подскажите? Ниже вопрос задавал.

Вижу, у тебя очень хорошо получается спокойствие :-)

[MissingMethodException: Для данного объекта не определено
беспараметрических конструкторов. Тип объекта "mynb.Models.Story".]
даже до валидаторов дело не доходит.

До урока с отказом от static MySQL всё работало.

По VS код возвращаемый сервером 500.

[MissingMethodException: Для данного объекта не определено беспараметрических конструкторов. Тип объекта "mynb.Models.Story".]
System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +233
System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +530
System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +330

Евгений, адрес немного другой, но нашёл. Спасибо оКам установлен, хорошая программа.

Работая с этим сайтом, Вы даете согласие на использование файлов Cookie.

Закрыть

Все верно, над оформлением предстоит поработать. Торопился закончить механику. :)

Все верно, над оформлением предстоит поработать. Торопился закончить механику. :)

Молодец, отлично поработал, практика наше всё! =)

Буквы я бы светлыми сделал, если фон такой =)

Какие то мрачный тона

Терпения и настойчивости!

Поздравляю с финалом! Молодец! =)

Молодец, Alex! Отличная презентация! Поздравляю с финалом!

Евгений, а знаете, разобрался! :)

Есть 2 ошибки в коде.
1я - отсутствие конструктора по умолчанию в модели Story: Story()<>
без него не инициализируется post возвращаемый представлением add.cshtml в storyController.add(Story post).
Решение: Добавляем.

2я вытекает из предидущей. Добавляя Story()<> , без инициализации sql
(дабы не нагружать сервер лишним в случае post подключением),
при приравнивании в
storyController.add(Story post)
<.
story = post;
. >
- story.sql равна null.
Решение: передаем только значимые поля
story.title = post.title;
story.story = post.story;
story.email = post.email;

Эх, многому можно у вас, настоящего педагога, поучиться.. Спасибо. :)))

Эх, многому можно у вас, настоящего педагога, поучиться.. Спасибо. :)))

Я в восторге от твоих возможностей самостоятельно находить ошибки!

Евгений, а знаете, разобрался! :)

Есть 2 ошибки в коде.
1я - отсутствие конструктора по умолчанию в модели Story: Story()<>
без него не инициализируется post возвращаемый представлением add.cshtml в storyController.add(Story post).
Решение: Добавляем.

2я вытекает из предидущей. Добавляя Story()<> , без инициализации sql
(дабы не нагружать сервер лишним в случае post подключением),
при приравнивании в
storyController.add(Story post)
<.
story = post;
. >
- story.sql равна null.
Решение: передаем только значимые поля
story.title = post.title;
story.story = post.story;
story.email = post.email;

Боюсь, что сейчас нет.
Напиши Валере - 791, попроси его связаться по скайпу или тимке и помочь.

Евгений, а по базовому аспекту подскажите? Ниже вопрос задавал.

Вижу, у тебя очень хорошо получается спокойствие :-)

[MissingMethodException: Для данного объекта не определено
беспараметрических конструкторов. Тип объекта "mynb.Models.Story".]
даже до валидаторов дело не доходит.

До урока с отказом от static MySQL всё работало.

По VS код возвращаемый сервером 500.

[MissingMethodException: Для данного объекта не определено беспараметрических конструкторов. Тип объекта "mynb.Models.Story".]
System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +233
System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +530
System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +330

Евгений, адрес немного другой, но нашёл. Спасибо оКам установлен, хорошая программа.

Читайте также: