2013-05-28 91 views
3

我搜索了高和低,並嘗試了很多不同的選項,但無法弄清楚這裏出了什麼問題。Knockoutjs observable數組到列表<string>

我有一個knockoutjs視圖模型,它看起來像這樣:

{"Id":0,"Type":"post","Title":"adsf","AuthorId":0,"Description":"adsfadsf","ChosenCategoryValues":["7","8","9"]} 

(某些領域不再贅述)

一切都被傳遞迴控制器就好了,除了ChosenCategoryValues。這是客戶端的一個可觀察的數組,服務器端的List<string>。它總是返回null,使用第一個項目中的所有值解開字符串,然後我必須對其進行字符串解析。

$.post("/serverurl", viewmodel, function (response) { do some stuff }, "json");是如何被髮送到服務器。

我試過ko.toJS使它成爲一個簡單的數組,沒有結果。

我確定這是基本的東西,我是新來的knockoutjs,但我一直在這裏已經太久了,而且我在網上找到的所有建議都無法提供幫助。

+0

嘗試調用'$ .ajaxSetup({傳統:真});'之前在你的頁面加載方法'$ .pos'。 – nemesv

+1

您是否使用過提琴手來查看請求?實際的json是在請求中傳輸的,還是作爲http表單值傳遞的值? –

回答

1

正如我上面評論,你應該使用fiddler來看看請求。我懷疑你的數據不是作爲json發送的。當您的值作爲普通html post值發送時,通常不會映射集合。

我建議創建實際的JSON如下所示爲與JSON.stringify發送到服務器:

$.post("/serverurl", JSON.stringify(viewmodel), function (response) { do some stuff }, "json"); 
2

爲了發送視圖模型的數據,你應該得到的視圖模型數據轉換成JSON(記住 - 觀測是簡單的功能),這是通過調用ko.toJSON()函數實現的。

此外,您還需要告訴服務器,您正在發送JSON數據。您無法通過jQuery post()方法實現 - 數據類型參數僅影響預期的服務器響應類型,但不影響請求內容類型。所以,簡單地使用jQuery ajax()方法:

$.ajax({ 
    url: '/serverurl', 
    type: 'POST', 
    data: ko.toJSON(viewmodel), 
    contentType: 'application/json', 
    success: function(response) { 
     // do some stuff 
    } 
}); 
相關問題