在Knockout js中使用web api发布数据

时间:2013-09-05 16:49:08

标签: knockout.js knockout-2.0 asp.net-web-api

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

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

我有以下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);
            }
        }

1 个答案:

答案 0 :(得分:1)

您的viewModel中有一些错误。

  1. 在$ .ajax中,您应该将json对象转换为字符串,使用JSON.stringify。
  2. 通过ViewBag传递url是非常糟糕的主意,将其声明为静态,或者在创建时传递ViewModel。
  3. 所以,你的$ .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("");
        }
    
相关问题