HowTo: исправить «конструктор без параметров для этого объекта» в приложении AngularJS / MVC - PullRequest
0 голосов
/ 08 апреля 2020

У меня довольно сложная страница CRM, которая позволяет пользователю планировать занятия (например, где люди действительно посещают и учатся). Создание осуществляется через модальное поле, которое позволяет заполнить некоторые поля и нажать кнопку «Сохранить». Это представление собирает данные, введенные в объект, и передает их C#.

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

AngularJS (1.7.5):

scAPI.DoTheThing({
        classId          : vm.item.Class.ClassId,
        venueId          : vm.item.Class.VenueId,
        courseDate       : vm.item.Class.CourseDate,
        startTime        : vm.item.Class.StartTime,
        cost             : vm.item.Class.Cost,
        complianceComment: vm.item.Class.ComplianceComment,
        isPrivate        : hasValue(vm.item.Class.Private) ? vm.item.Class.Private : false,
        instructors      : vm.item.Instructors
    })
    .then(
        function(result) {
            var bob = 1;
        }
    )
    .catch(function(errorOne) {
        handleApiCallError(errorOne,
            function() {
                vm.readOnly = false;
                vm.classSaving = false;
            });
    });

Все параметры имеют значения ... "scAPI.DoTheThing" запускает этот вызов:

DoTheThing: function (params, error) {
    return $http
        .post("/SchoolManagement/NewScheduledClass", params)
        .then(handleNGV4Success)
        .catch(function (e) {
            handleNGV4Error(e, error);
        });
}

, который, в свою очередь, должен использовать этот метод C#:

public ActionResult NewScheduledClass(int classId, int venueId, string courseDate, string startTime, decimal cost, string complianceComment, bool isPrivate,
    IEnumerable<InstructorDataWithRoles> instructors)
{
    var cDate = parseDate(courseDate);
    var sTime = parseDate(startTime);

    var newClass = _smap.NewScheduledClass(classId, venueId, cDate, sTime, cost, complianceComment, isPrivate, instructors);

    var result = new
    {
        newClass
    };

    return HandleRequest(() => result);
}

Как я уже говорил, в этом приложении сотни раз я выполнял такой же вызов метода, без проблем, но в этом случае у меня проблемы. Единственное, что я делаю по-другому в этом C# controller.cs - это то, что Controller является частичным классом. Этот конкретный контроллер обрабатывает функциональность на 5 вкладок в пользовательском интерфейсе, и я подумал, что было бы лучше поместить код конца каждой вкладки в отдельные файлы классов (простота обслуживания). Это было первое в своем роде в нашем решении, и все остальные вкладки работают нормально, но эта просто почему-то испорчена.

1 Ответ

1 голос
/ 08 апреля 2020

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

При рассмотрении типов аргументов InstructorDataWithRoles должно быть виновником.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...