我遇到了将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。
也许以前有人这样做过?
答案 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。