2014-09-23 77 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()) 
}),