Knockout和MVC2:将模型发送到控制器

时间:2012-07-18 16:39:57

标签: asp.net-mvc-2 knockout.js

我遇到了将json从knockout发送到mvc2控制器动作的问题。 以下是我在视图中的内容:

var ViewModel = {
            FirstName: ko.observable("FirstName"),
            LastName: ko.observable("LastName"),
            Save: function () {
                ko.utils.postJson(location.href, this);
            }
}
ko.applyBindings(ViewModel);

我在控制器中有一个动作:

public virtual ActionResult SomeAction(MyModel model) {
        //do smth
        return View(registrationModel);
}
public class MyModel {
   public string FirstName {get;set;}
   public string LastName {get;set;}
}

问题在于我引用了字符串值,比如“\”FirstName \“”,我知道有一些方法可以避免这种情况(在MVC3中使用JSON.stringify)。 我尝试了以下内容:

ko.utils.postJson(location.href, JSON.stringify({model: this});

var json = JSON.stringify({
FirstName: this.FirstName(),
LastName: this.LastName()
});
ko.utils.postJson(location.href, JSON.stringify({model: json});

ko.utils.postJson(location.href, json);

在所有这三个选项中,我得到model = null,或者所有值在Controller中为null。

也许以前有人这样做过?

1 个答案:

答案 0 :(得分:1)

我发现为了使MVC对象映射起作用,您需要将POST的内容类型设置为“application / json; charset = utf-8”。我之前从未使用ko.utils.postJson()做过这个,但这里是一个使用jQuery的工作示例:

    $.ajax({
        url: url,
        type: "POST",
        data: ko.toJSON(ViewModel),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (response) {
        },
        error: function (response, errorText) {
        }
    });

注意我正在使用ko.toJSON将模型序列化为JSON。