2011-07-07 35 views
0

我想從我的視圖模型(以ko.observableArray的形式)傳遞一個字符串數組到Asp.net MVC中的控制器。如何將ko.observableArray傳遞給MVC控制器?

由於ko.observableArray是一個對象而不是數組,它不能簡單地通過$.ajax方法傳遞並用作控制器端的數組。

如何將ko.observableArray中的數據傳遞給控制器​​,以便我可以將它用作控制器端的數組?

回答

6

敲除具有兩個實用功能,稱爲ko.toJSko.toJSON

var myPlainObject = ko.toJS(root)將遍歷您的對象並將任何可觀察值轉換爲普通的JavaScript屬性。

var myJSONstring = ko.toJSON(root)將執行相同的操作,然後對結果執行JSON.stringify

因此,您可以在viewModel上使用這些函數來獲取普通的JavaScript對象。

來自文檔的信息here

如果您observableArray的項目不包含可觀,那麼你可以簡單地僅僅通過做myObservableArray()

更新獲取底層數組:基於評論。這對我來說工作得很好:

var viewModel = { 
    items: ko.observableArray(["one", "two", "three", "four"]), 
    sendItems: function() { 
      $.ajax({ 
      type: "POST", 
      url: "@Url.Action("Test")", 
      data: ko.toJSON(viewModel.items), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 
       if (data) { 
        alert(ko.toJSON(data)); 
       } 
      } 
     }); 
    } 
}; 

面對那樣一個動作:

//just echo back data 
    public JsonResult Test(List<String> myList) 
    { 
     return Json(myList); 
    } 

這是否匹配你正在嘗試?再次

+0

感謝您的幫助,我的情況下,observableArray被存儲字符串數組,我想檢索控制器側陣列,這樣我可以在其上使用一個循環,這樣的: >>公共JsonResult測試(列表 myObservableArray) 但是,如果我直接發送它傳遞一個對象,而不是一個數組,我無法通過循環內部的observableArray獲取字符串。 我試圖使用ko.toJSON(),但我仍然無法弄清楚如何獲取observableArray並將其轉換爲控制器端的字符串數組。 – nelsonwrong

+0

已更新的答案。希望這可以幫助。 –

+0

感謝您的幫助,它終於有效:) – nelsonwrong

相關問題