2013-02-09 96 views
3

我有一個方法在一個web api控制器,從javascript(敲除)函數被調用。

public void SaveEmailTempage(EmailTemplateModel template) 
    { 
     var x = template.ToString(); 
    ... 

上面的x變量只在那裏,所以我可以在控制器中設置一個斷點,它會被擊中。傳入的模板變量的所有屬性始終設置爲空,那就是問題 - 爲什麼?我不確定在$ .ajax調用中傳入什麼,數據參數。

在JavaScript中我有這個(下面)。在數據屬性中,我嘗試了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

您的'EmailTemplateModel'類和您的客戶端'emailViewModel'看起來是什麼樣子?你知道屬性名稱應該匹配嗎?理論上講,'data:ko.toJSON(self)'應該可以工作。 – nemesv 2013-02-09 08:59:54

+0

謝謝 - 它們被命名爲相同,但我沒有在.net模型中定義的所有屬性,因爲它們確實不需要服務器端。將它們全部添加後,似乎已經解決了它。 – user1202839 2013-02-09 20:44:21

回答

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