使用Ajax将数据从Knockout发布到Controller

时间:2015-04-16 12:13:11

标签: javascript ajax asp.net-mvc knockout.js

我为控制器参数获取null。我正在发布数据,因为我可以在Chrome Developer工具中看到它。我在MVC中有一个与下面的Person模型匹配的Person模型。这是我的ViewModel:

 function Person(data) {
    this.FirstName = ko.observable(data.FirstName);
    this.LastName = ko.observable(data.LastName);
    this.Id = ko.observable(data.Id);

    this.fullName = ko.computed(function () {
        return this.FirstName() + " " + this.LastName();
    }, this);

}

function PersonViewModel() {
    var self = this;
    self.people = ko.observableArray([]);



    $.getJSON("/api/person/getpeople", function (allData) {
        var mappedTasks = $.map(allData, function (item) { return new Person(item) });
        self.people(mappedTasks);
    });


    self.save = function(){

        $.ajax("/api/person/updateperson", {
            data: ko.toJSON({ people: self.people }),
            type: "post", contentType: "application/json",
            success: function (result) { alert(result) }
        });
    }
}
ko.applyBindings(new PersonViewModel);

API控制器:

  [HttpPost]
    public bool UpdatePerson(List<Person> person)
    {
        return mgr.UpdatePerson(person);
    }

1 个答案:

答案 0 :(得分:1)

您需要确保服务参数的名称与您传递的内容相匹配。

self.save = function(){

        $.ajax("/api/person/updateperson", {
            data: ko.toJSON({ person: self.people }),
            type: "post", contentType: "application/json",
            success: function (result) { alert(result) }
        });
    }