我在web api控制器中有一个方法,它是从一个javascript(knockout)函数调用的。
public void SaveEmailTempage(EmailTemplateModel template)
{
var x = template.ToString();
...
上面的x变量只是存在,所以我可以在控制器中设置一个断点,然后它被击中。传入的模板变量将其所有属性始终设置为null,这就是问题 - 为什么?我不确定在$ .ajax调用数据参数中传递什么。
在javascript中我有这个(下面)。在data属性中,我尝试过self,this,ko.JS,ko.JSON - 每个都有self,this,$ data,$ root作为输入,似乎没什么我放在那里传递一个值。在aspx中,我有一个带有data-bind =“value:ko.toJSON($ root)”的textarea,它确实包含了我想发送给服务器的json。
function emailViewModel() {
var self = this;
//data
...
//operations
...
self.saveTemplate = function () {
$.ajax({
url: '/api/emailtemplate/',
type: 'POST',
data: ko.toJSON({template: self}),
contentType: 'application/json',
success: function (result) {
alert('success');//debug
},
error: function () { alert('fail');}//debug
});
}
return self;
}
答案 0 :(得分:0)
我认为你需要将dataType指定为json。以下适用于我(使用node / express作为POST处理程序):
...
this.saveTemplate = function() {
$.ajax({
url: "/api/emailtemplate",
type: "POST",
data: ko.toJSON({ template: this }),
contentType: "application/json",
dataType: "json",
success: function(result) {
alert("success");
},
error: function() {
alert("fail");
}
}
...