3

我在 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)" 的文本区域,它确实包含我想发送到服务器的 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;
}
4

1 回答 1

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");
      }
    }
...
于 2013-02-09T06:27:52.160 回答