2010-01-19 4 views
6

Je suis en train de faire quelque chose le long des lignes de ce qui suit où j'ai un contrôleur avec une méthode similaire à:modèle Ajax liaison d'un type complexe

public ActionResult Insert(Author author) { 
    //do something... 
} 

Lorsque le type d'auteur ressemble:

public class Author { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public Book[] Books { get; set; } 

    public Author() { 
    Books = new Book[0]; 
    } 
} 

public class Book { 
    public string Title { get; set; } 
    public int NumberOfPages { get; set; } 
} 

partir d'une page que je veux soumettre des données à l'aide de JQuery et Ajax quelque chose comme

function addAuthor() { 
    var auth = { 
    'FirstName': 'Roald', 
    'LastName': 'Dahl', 
    'Books': [ 
     { 
     'Title': 'Charlie and the Chocolate Factory', 
     'NumberOfPages': 264 
     }, 
     { 
     'Title': 'The Twits', 
     'NumberOfPages': 316 
     } 
    ] 
    }; 

    $.ajax({ 
    type: "GET", 
    url: "/Insert", 
    data: auth 
    }); 

} 

MVC lie l'auteur ob ject (FirstName et LastName sont définis) mais ne lie pas la propriété Books. Pourquoi est-ce et comment puis-je soumettre un objet contenant un tableau (ou une collection) en tant que propriété via AJAX?

Répondre

2

DaveG,

Ne serait-vous besoin d'utiliser une méthode POST plutôt que l'EEG ??

à savoir

$.ajax({ 
    type: "POST", 
    url: "/Insert", 
    data: auth 
    }); 

je suis sûr qu'il peut y avoir d'autres problèmes et la mise en forme re JSON mais c'est mon thoights initiale au 1er coup d'oeil.

+0

j'ai le même problème et POST a fait l'affaire. Je ne sais pas pourquoi ça marche comme ça, mais c'est ce que c'est – ivowiblo

1

Ce qu'il fixe pour moi: https://stackoverflow.com/a/9775470/647845

Il revient à ajouter

contentType: 'application/json' 

et en ajoutant JSON.stringify avant d'envoyer vos données:

data: JSON.stringify(dataObj),