2010-12-01 3 views
3

У меня есть 2 класса, которые используются для зеркалирования данных из вызова ajax. Один (Клиент) содержит свойство, которое является именем, а другое представляет собой массив Продукты.Передача сложных данных JSON jQuery в действие

Public Class Customer 
    Private _Name as String 
    Private _Products as Product() 

    Public Property Name() As String 
     Get 
      Return _Name 
     End Get 
     Set(ByVal value As String) 
      _Name = value 
     End Set 
    End Property 

    Public Property Products() As Product() 
     Get 
      Return _Products 
     End Get 
     Set(ByVal value As Product()) 
      _Products= value 
     End Set 
    End Property 

и Ajax вызова:

$.ajax({ 
     url: '../../Customer/SaveCustomerData', 
     type: "POST", 
     dataType: "json", 
     data: { "Name": this.Name, 
       "Products": [{ "ProductCode": "product 1", "ProductName": "product 1" }, 
          { "ProductCode": "product 2", "ProductName": "product 2"}] 
     }, 
     success: function(data) { 
      alert("Customer has been saved!"); 
     } 
    }); 

Значение Customer.Name отражается, но свойства продуктов ничего не останется, все еще имея длину 2.

Я пропускаю что-то действительно важное здесь?

ответ

4

Прямо сейчас вы не передаете JSON, вы передаете данные, как это, (сериализован с $.param()) ... который выглядит следующим образом:

Name=something&Products%5B0%5D%5BProductCode%5D=product+1&Products%5B0%5D%5BProductName%5D=product+1&Products%5B1%5D%5BProductCode%5D=product+2&Products%5B1%5D%5BProductName%5D=product+2 

Чтобы передать JSON, вам нужно stringify его, как это:

data: JSON.stringify({ "Name": this.Name, 
     "Products": [{ "ProductCode": "product 1", "ProductName": "product 1" }, 
        { "ProductCode": "product 2", "ProductName": "product 2"}] 
     }), 

который выглядит следующим образом:

{"Name":"something","Products":[{"ProductCode":"product 1","ProductName":"product 1"},{"ProductCode":"product 2","ProductName":"product 2"}]} 

Теперь это что-то, что ваша модель может вернуться в объект. Для старых браузеров (< IE8), которые не поддерживают родные JSON, include json2.js, которые будут эмулировать поведение.

+0

да, но как запросить.getParameter, чтобы получить это? – 2014-03-07 07:35:02

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