2

如何使用 Web API 在Knockout JS.

当我发布数据时,它给出了 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);
            }
        }
4

1 回答 1

1

您的 viewModel 中有一些错误。

  1. 在 $.ajax 中,您应该将 json 对象转换为字符串,使用 JSON.stringify。
  2. 通过 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("");
    }
于 2013-10-30T06:54:43.513 回答