简体   繁体   English

ajax 向 MVC Api 控制器发送空值

[英]ajax sending null to MVC Api Controller

I am trying to send the variable as vm from view to API Controller by Ajax but in controller the parameter of method that get it is null!我试图通过 Ajax 将变量作为 vm 从视图发送到 API 控制器,但在控制器中,获取它的方法的参数为空! the error is : An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code错误是:EntityFramework.SqlServer.dll 中发生了“System.NotSupportedException”类型的异常,但未在用户代码中处理

Jquery Code :查询代码:

            var vm = {
                courseIds: []
            };

            var courses = new Bloodhound({
                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
                queryTokenizer: Bloodhound.tokenizers.whitespace,
                remote: {
                    url: '/api/Course/GetCourses?query=%QUERY',
                    wildcard: '%QUERY'
                }
            });
            var teachers = new Bloodhound({
                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
                queryTokenizer: Bloodhound.tokenizers.whitespace,
                remote: {
                    url: '/api/Teacher/?query=%QUERY',
                    wildcard: '%QUERY'
                }
            });


            $('#teacher').typeahead({
                    minLength: 1,
                    highlight: true
                },
                {
                    name: 'teachers',
                    display: 'Name',
                    source: teachers
                }).on("typeahead:select",
                function(e, teacher) {
                    vm.teacherId = teacher.Id;
                });
 $("#courses").typeahead({
                    minLength: 1,
                    highlight: true
                },
                {
                    name: 'courses',
                    display: 'Name',
                    source: courses
                }).on("typeahead:select",
                function(e, course1) {
                    $("#courselist").append("<li class='list-group-item'>" + course1.Name + "</li>");
                    $("#courses").typeahead("val", "");
                    vm.courseIds.push(course1.Id);
                    
                    console.log(vm); 
                });
            $("#newPlan").submit(function(e) {
                e.preventDefault();
                $.ajax({
                        url: "/api/new/",
                        method: "post",
                        data: vm
                    }).done(function() {
                        console.log("Done!");
                    })
                    .fail(function() {

                    });
            });

and the Controller Code is :控制器代码是:

        [HttpPost]
        public IHttpActionResult Plan(NewPlanDto coursePlan)
        {

            var teacher = _context.teachers.Single(m => m.Id == coursePlan.TeacherId);
            var courses = _context.Courses.Where(
                m => coursePlan.coursesId.Contains(m.Id)).ToList();


            if (courses != null)
            {
                foreach (var course in courses)
                {
                    var newCoursePlan = new CoursPlan()
                    {
                        Teacher = teacher,
                        Course = course

                    };
                    _context.CoursPlans.Add(newCoursePlan);
                }
            }
            _context.SaveChanges();

            return Ok();
        }

consule result :领事结果:

courseIds: Array [ 4, 4 ] teacherId: 6 courseIds: Array [ 4, 4 ] TeacherId: 6

Your problem is that you do not serialize the object while sending it to your controller.您的问题是您在将对象发送到控制器时没有对其进行序列化。

eg:例如:

$.ajax({
        url: "/api/new/",
        method: "post",
        data: JSON.stringify(vm)
    }).done(function() {
        console.log("Done!");
    })
    .fail(function() {

    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM