2017-05-16 5 views
0

Tout le monde peut m'aider à expliquer ce fait, c'est à propos de la manière dont MVC désérialise les données soumises.Envoyer les données de la liste dans ajax ne fonctionne pas avec la liste <data> dans le contrôleur

Supposons que nous avons un objet JSON comme ci-dessous:

var submitedData = { 
    name = "Gary", 
    jobs = [{id:1, jobName:'IT'}, {id:2, jobName:'Teacher'}] 
} 

Nous une demande ajax au serveur:

$.ajax({ 
type: "POST", 
url: '@Url.Action("ActionName")', 
contentType:'application/json', 
traditional: true, 
JSON.stringify(submitedData), 
success: function(){} 
}); 

Bien sûr, notre modèle de vue doit contenir exactement ce que les données JSON sont, peut-être comme ci-dessous

public class ViewModel{ 
public string name {get;set;} 
public List<Job> jobs {get;set;} 
} 
public class Job{ 
    public int Id {get;set;} 
    public string JobName {get;set;} 
} 

Ma question est la suivante: Lorsque nous appelons une requête ajax comme ci-dessus, la liste des tâches ne peut pas être liée pour afficher le modèle dans le contrôleur. La raison fondamentale est que nous avons défini des tâches dans ViewModel est une liste <>. Si nous changeons à IEnumerable<>, le contrôleur sera en mesure de lier les emplois:

public class ViewModel{ 
public string name {get;set;} 
public IEnumerable<Job> jobs {get;set;} 
} 

Pourquoi cela se produit?

Merci pour toutes les idées de votre part! p/s: Parce que cet exemple de code est écrit manuellement par moi-même, il a peut-être encore plusieurs autres problèmes.

S'il vous plaît ignorer, il suffit de se concentrer sur ma question: P.

Répondre

0

Votre objet json est incorrect. Cela devrait être

var submitedData = { 
    name : "Gary", 
    jobs : [{id:1, jobName:'IT'}, {id:2, jobName:'Teacher'}] 
} 
+0

Merci pour votre temps @Buban Shrestha, même si je le corrige, la liste des tâches n'est toujours pas liée au modèle MVC. Je travaille sur un projet commercial alors je ne pourrais pas vous montrer le code source exactement. J'ai donc écrit manuellement un échantillon pour décrire ma question. –