2014-09-23 48 views
1

確定。我遇到了一個我無法理解的問題。Asp.net MVC 5 Modelbinding多個JSON對象(knockoutjs)

首先,我嘗試後幾個ko.observableArrays控制器作爲JSON和seperately modelbinding他們。當我只發佈一個,並沒有將它命名爲.ajax的數據屬性時,它發佈的很好,並且模型綁定完美無瑕。

這是我從我的ViewModel一個片斷,是我是多麼嘗試發佈兩個JSON對象。

 self.timeRanges = ko.observableArray(); 
     self.geoRequirements = ko.observableArray(); 

     self.saveWorkWish = function() { 


       $.ajax({ 
        url: "@Url.Action("SaveWorkWish")", 
       type: "POST", 
       contentType: 'application/json; charset=utf-8', 
       data: { 
        timeRanges: ko.toJSON(self.timeRanges()), 
        geoRequirements: ko.toJSON(self.geoRequirements()) 
       }, 

       complete: function (data) { 
        console.log(data); 
       } 
      }); 

     }; 

我的行動

public JsonResult SaveWorkWish(IList<JSONTimeRanges> timeRanges, IList<JSONGeoRequirements> geoRequirements) 
    { 

     // do stuff 

    } 

我得到這個異常: 無效的JSON原始:timeRanges。

而有趣的是,當我這樣做:

   $.ajax({ 
        url: "@Url.Action("SaveWorkWish")", 
       type: "POST", 
       contentType: 'application/json; charset=utf-8', 
       data: ko.toJSON(self.timeRanges()), 

       complete: function (data) { 
        console.log(data); 
       } 
      }); 

public JsonResult SaveWorkWish(IList<JSONTimeRanges> timeRanges) 
    { 

     // do stuff 

    } 

它工作得很好。

最後,我注意到了,很可能是錯誤的原因的事情是:

當我發佈2個Jsons比如上例中, 這是我發佈的信息鉻告訴我: timeRanges = %5B%7B%22startDate%22%3A%2214-09-2014%22%2C%22 EndDate%22%3A%2220-09-2014%22%2C .....等。

and in工作實例:

它是一種公格式化和可讀JSON對象。

所以好像誤差確實是正確的,而且我不發送有效的JSON控制器。

But..what我做錯了什麼?

回答

1

嘗試觀測轉換成JSON,然後再整個對象轉換成JSON字符串:

data: JSON.stringify({ 
    timeRanges: ko.toJS(self.timeRanges()), 
    geoRequirements: ko.toJS(self.geoRequirements()) 
}),