Knockout.js 在Knockout js中使用webapi发布数据

Knockout.js 在Knockout js中使用webapi发布数据,knockout.js,knockout-2.0,asp.net-web-api,Knockout.js,Knockout 2.0,Asp.net Web Api,如何在Knockout JS中使用Web API发布数据 当我发布数据时,它给出mn错误请求错误 我有以下ViewModel function StudentViewModel() { var self = this; self.StudentID = ko.observable(""); self.Name = ko.observable(""); self.Age = ko.observable

如何在
Knockout JS
中使用Web API发布数据

当我发布数据时,它给出mn错误请求错误

我有以下
ViewModel

 function StudentViewModel() {
            var self = this;
            self.StudentID = ko.observable("");
            self.Name = ko.observable("");
            self.Age = ko.observable("");


            var Student = {
                StudentID: self.StudentID,
                Name: self.Name,
                Age: self.Age
            };

            self.Student = ko.observable();
            self.Students = ko.observableArray();

            var baseUri = '@ViewBag.ApiUrl';
            $.getJSON(baseUri, self.Students);
            self.create = function () {
                if (Student.Name() != "" && Student.Age() != "") {
                    $.ajax({
                        url: baseUri,
                        cache: false,
                        type: 'POST',
                        contentType: 'application/json; charset=utf-8',
                        data: ko.toJSON(Student),
                        success: function (data) {
                            // alert('added');
                            self.Students.push(data);
                            self.Name("");
                            self.Age("");
                        }
                    }).fail(function (xhr, textStatus, err) {
                        alert(err);
                    });
                }
                else {
                    alert('Please Enter All the Values !!');
                }
            };
更新:

这是控制器的动作

public HttpResponseMessage PostStudent(Student student)
        {
            if (ModelState.IsValid)
            {
                db.Students.Add(student);
                db.SaveChanges();

                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, student);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = student.StudentID }));
                return response;
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
        }

您的viewModel中有一些错误

  • 在$.ajax中,您应该将json对象转换为字符串,使用json.stringify
  • 通过ViewBag传递url这是一个非常糟糕的主意,将其声明为静态,或者在创建时传递ViewModel
  • 因此,您的$.ajax应该如下所示:

    var submitData = ko.toJSON(Student);
    $.ajax({
        url: baseUri,
        cache: false,
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(submitData),
        success: function (data) {
            // alert('added');
            self.Students.push(data);
            self.Name("");
            self.Age("");
        }
    

    您的控制器操作看起来如何?@nemesv查看更新日志,如您的帖子到达控制器,但模型数据无效。尝试(a)查看应用程序正在发送的实际HTTP请求,以及(b)使用类似Fiddler的方法测试发送POST请求,并查看是否有任何差异。您是否应该在这一行“data:ko.toJSON(Student)”中引用self.Student?在VS中调试时,您还可以检查ModelState,以查看它有哪些错误。调试还将帮助您查看是否所有内容都正确映射到学生对象-