1

我在将 json 从淘汰赛发送到 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);

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

也许有人以前做过这个?

4

1 回答 1

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。

于 2012-07-18T17:47:15.787 回答