asp.net mvc3 retourner plusieurs json liste
Im asp.net mvc3 de code c# renvoie du json liste comme ceci:
return Json(new { name = UserNames, imageUrl = ImageUrls });
UserNames
et ImageUrls
sont à la fois List<string>
types
Et c'est mon javascript
function StartSearch(text) {
$.ajax({
url: '/Shared/Search',
type: 'POST',
data: { SearchText: text },
dataType: 'json',
success: function (result) {
$.each(result, function (i, item) {
alert(result[i].name);
});
}
});
}
Comment je peux obtenir les noms et les ImageUrls
?
Grâce
Vous devez vous connecter pour publier un commentaire.
Ce qui indique la valeur de
Name
de chaque enregistrement de chaque liste.Cela suppose que votre réponse Json si formé correctement. Comme ceci:
Mais comme une note de côté, je vois d'autres problèmes avec votre code que vous avez besoin de l'adresse
POST
, vous êtes à la recherche basée sur entrée. ChangementPOST
àGET
dans votre appel AjaxJsonResult
.Des conventions de nommage pour C# paramètres de la méthode d'appel de Pascal-boîtier. L'utilisation d'une lettre minuscule pour le premier caractère
.each
méthode,i
est chaque objet de la liste afin de l'appelant.each
surresult
itération porte uniquement sur le résultat, de sorte que le premier objet est le premier de la liste, l'objet suivant est le suivant de la liste. Donc, pour itérer sur les éléments de chaque liste, un second tour est nécessaire. Par exemple, dans mon test,.each(result, function(i, item( { alert[i]; }
donne le nom de chaque liste, dans mon casFirstList
etSecondList
.imageUrl
liste. Donc je suppose que c'est juste de la sémantique, soit vous appelez.each
surresult.name
puis un deuxième appel après que.each
surresult.imageUrl
ou vous l'appelez.each
surresult
et puis un innerloop sur les éléments de chaque liste.each
sur résultat donne le nom de chaque objet retourné, le nom et l'imageUrls. Donc, pour itérer sur chaque liste vous appelez.each
surresult.name
puis un deuxième appel surresult.imageUrls
. Je peux mettre à jour le GitHub du projet que je suis en essais avec si vous voulez vérifierAccès nom comme une propriété du résultat de ce genre,
result.name[i]
Essentiellement, le résultat va contenir le nom et imageUrl qui sont les deux tableaux, comme vous avez définies dans votre type anonyme, de sorte que votre code doit être modifié comme ceci pour afficher une alerte pour chaque nom dans la matrice de
comme
$each
itère sur les éléments dans le nom du tableau, il va passer l'élément de la deuxième paramètre de votre retour d'appel, c'est à dire de l'élément.donc
ouvrira chaque nom.
Notes:
Vous pouvez modifier les propriétés de votre type anonyme pour refléter le fait qu'ils sont une collection:
de cette façon, il aura plus de sens lorsque vous parcourez-les dans votre réussite fonction.
Comme AlfalfaStrange souligné, je n'ai pas de démontrer comment vous pouvez accéder à la fois à des tableaux. Ce qui m'a fait penser, quelle est la relation entre les noms d'utilisateur et l'url de l'image?
Est-ce une liste d'images pour un utilisateur? Peut-être que vous devriez considérer est la création d'un modèle spécifique pour cela. Par exemple, UserDisplayModel:
Dans votre contrôleur de retourner une liste de UserDisplayModels. Si c'est le cas, vous aurez à repenser pourquoi ils sont deux listes distinctes, en premier lieu. Peut-être ImageUrl devrait être un champ dans la table User.
Alors maintenant, quand vous êtes de retour d'une liste unique, par exemple
vous pouvez effectuer une itération entre eux en une seule fois dans le code js: