2011-07-07 24 views
0

私のビューモデル(ko.observableArrayの形式)の文字列の配列をAsp.net MVCのコントローラに渡したいとします。ko.observableArrayをMVCコントローラに渡すにはどうすればいいですか?

ko.observableArrayは配列ではなくオブジェクトであるため、単に$.ajaxメソッドを通過させてコントローラ側の配列として使用することはできません。

ko.observableArrayのデータをコントローラに渡してコントローラ側のアレイとして使用するにはどうすればよいですか?

答えて

6

ノックアウトには、ko.toJSko.toJSONという2つのユーティリティ機能があります。

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は文字列の配列を格納していますので、コントローラー側で配列を取得してループを使用できます: >> public JsonResultテスト(List myObservableArray) しかし、私はそれが直接observableArray内のループで文字列を取得できない配列ではなくオブジェクトを渡すことを送信します。 私はko.toJSON()を使用しようとしましたが、observableArrayを取得してコントローラ側の文字列配列に変換する方法はまだ分かりません。更新された回答 – nelsonwrong

+0

お役に立てれば。 –

+0

あなたのおかげでありがとう、それは最終的に動作します:) – nelsonwrong

関連する問題