2012-03-07 5 views
6

パス複雑なJSONのMVC 3アクション

Locationsアクションパラメータモデルに移入されMVC 3のアクションに複雑なJSONオブジェクトを渡ししようとしているときに、私はいくつかの奇妙な結果を取得しています

へのオブジェクトが、名前場所はありません。

私がko.toJS(testViewModel)を実行すると、名前と場所はありますが、場所は空白ですか?

私が使用していますknockout.js:

var testViewModel = { 
     Name: ko.observable("Joe Bob"), 
     Locations: ko.observableArray([ 
      { ID: 1, Name: "Salem, OR" }, 
      { ID: 2, Name: "Big Bear Lake, CA" }, 
      { ID: 3, Name: "Big Bear City, CA" } 
     ]), 
     Position: ko.observable("Manager") 
    } 

jQueryのAJAX経由で送信:

$.ajax({ 
      url: "/ClaimsAuthority/Home/TestIt", 
      type: "POST", 
      data: ko.toJSON(testViewModel), 
      success: function (data, status, xhr) { 
       //ko.applyBindings(data); 
      } 
     }); 

MVCアクション:

<HttpPost()> 
     Public Function TestIt(model As TestModel) As ActionResult 
      Return Json(model) 
     End Function 

モデル:

Public Class TestModel 
    Public Property ID As Integer 
    Public Property Name As String 
    Public Property Locations As ICollection(Of LocationModel) 
    Public Property Position As String 
End Class 

Public Class LocationModel 
    Public Property ID As Integer 
    Public Property Name As String 
    Public ReadOnly Property DisplayText As String 
     Get 
      Return String.Format("({0}) {1}", ID, Name) 
     End Get 
    End Property 
End Class 

答えて

15

は、あなたのAJAXリクエストにapplication/jsonにコンテンツタイプを設定してみてください:

$.ajax({ 
    url: '/ClaimsAuthority/Home/TestIt', 
    type: 'POST', 
    contentType: 'application/json', 
    data: ko.toJSON(testViewModel), 
    success: function (data, status, xhr) { 
     //ko.applyBindings(data); 
    } 
}); 
+0

おかげでダーリン!それはうまくいった!もうすぐ別のビールにおまかせします! – Sam

+0

複雑なモデルをこのように解析し、コントローラのアクションで型付きオブジェクトとして受け取ることはできますか?私は同じことをしようとしているが、オブジェクトのコレクションは、インスタンスでは、空のプロパティ値が付属しています。 –

+0

@ GustavoRubio、はい、任意に複雑なオブジェクトやコレクションを使用することは可能です。 JSONをシリアル化することはできないため、循環オブジェクト参照のみがサポートされていません。 –

関連する問題