2013-05-22 1 views
0

J'ai une question liée à mon contrôleur dans MVC. Je veux faire une boucle dans mon JsonResult GetAfmeldingen en utilisant foreach.Contrôleur MVC 4 JsonResult

Mais ce que je ne va pas dans ma foreach voici mon code comme il semble en ce moment

public JsonResult GetJsonAfmeldingen() 
{ 
    if (Functions.HasLoginCookie()) 
    { 
     if (Models.Taken.ActID > 0) 
     { 
      foreach (var item in Talent.Afmelding.Fetch(null, Models.Taken.ActID, null, null)) 
      {    
       return Json(item.Participant.CompleteName, JsonRequestBehavior.AllowGet); 
      } 

      return Json("Empty ?? ID = " + Models.Taken.ActID + "", JsonRequestBehavior.AllowGet); 
     } 
     else 
     { 
      return Json(null, JsonRequestBehavior.AllowGet); 
     } 
    } 
    else 
    { 
     return Json(null, JsonRequestBehavior.AllowGet); 
    } 
} 

Dans cet exemple, je reviens un JsonResult lorsque le premier enregistrement dans ma liste frappe. J'ai regardé pour voir si cela fonctionne mais ce n'est pas le cas. L'identifiant est rempli mais qu'est-ce qui me manque ici? Je suis nouveau à MVC.

+0

Les deux 'retour JSON (item.Participant.CompleteName, JsonRequestBehavior.AllowGet)' et 'retour JSON (» Vide ?? ID = "+ Models.Taken.ActID +" ", JsonRequestBehavior.AllowGet);' Ne sont pas valides Json. Vous voulez quelque chose comme 'return Json (nouveau {ID = Models.Taken.ActID}, JsonRequestBehavior.AllowGet);' Cela retournera un objet Json valide. –

+0

Pourriez-vous poster votre requête ajax? –

Répondre

2

Ceci est probablement ce qui ne fonctionne pas, car vous ne pouvez pas entrer dans le foreach.

public JsonResult GetJsonAfmeldingen() 
{ 
    if (Functions.HasLoginCookie()) 
    { 
     //This one is probably not filled. 
     if (Models.Taken.ActID > 0) 
     { 

Cela pourrait être une solution possible:

public JsonResult GetJsonAfmeldingen(int actID) 
{ 
    if (Functions.HasLoginCookie()) 
    { 
     //Now it is filled if you post it correctly. 
     if (actID > 0) 
     { 

Ensuite essayer de le tester dans une portée plus limitée. Essayez d'avoir un point d'arrêt sur cette ligne et voir si la liste est remplie.

var listAfmeldingen = Talent.Afmelding.Fetch(null, Models.Taken.ActID, null, null); 
    //Breakpoint here 
    int count = listAfmeldingen.Count; 
    foreach (var item in listAfmeldingen) 
    { 
     return Json(item.Participant.CompleteName, JsonRequestBehavior.AllowGet); 
    } 

Jetez un oeil à votre cheminement aussi bien, je l'utilise celui-ci:

 routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
+0

Si je transmets une valeur nulle à la place de l'ID, cela ne doit pas non plus apparaître dans le foreach –

+0

Ok, cela signifierait que ActID n'est pas> 0 ou qu'il n'y a pas de cookie de connexion. –

2

Cela se terminera sur la première boucle de la foreach, c'est ce que vous voulez?

  foreach (var item in Talent.Afmelding.Fetch(null, Models.Taken.ActID, null, null)) 
      { 

       return Json(item.Participant.CompleteName, JsonRequestBehavior.AllowGet); 
      } 
+0

Oui juste pour l'instant pour voir si je reçois le rappel avec les données –

+0

"pour cet exemple, je renvoie un Jsonresult lorsque le premier enregistrement dans ma liste, juste pour voir si cela fonctionne mais il ne fonctionne pas." Probablement, il le veut pour l'instant, juste pour tester –

+0

Eh bien, je ne vous vois pas passer de données dans l'appel, alors vous l'analysez manuellement dans l'une de vos autres fonctions via la chaîne de requête. Est-ce que Model.Taken.ActID> 0? –