$ .ajax post,knockout和web api

时间:2013-02-09 04:46:43

标签: jquery ajax knockout.js

我在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;
}

1 个答案:

答案 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");
      }
    }
...