2012-03-07 3 views
6

Я получаю некоторые странные результаты при попытке пройти сложный объект JSON к действию в MVC 3.Pass комплекс JSON объекта к MVC 3 действий

The Locations заселены на модели параметра действия, но имя и места нет.

Если у меня есть 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

Попробуйте установить тип содержимого application/json в запросе AJAX:

$.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. –

Смежные вопросы