2012-10-03 5 views
0

J'ai un comportement incohérent avec un appel Ajax.ASP.NET MVC 3 - Comportement des résultats JSON incohérent

Controller ...

public JsonResult checkWwid(string wwid) 
    { 
     EMPLOYEE employee = db.EMPLOYEES.SingleOrDefault(e => e.ID == wwid.ToUpper()); 
     if (employee != null) 
     { 
      return Json(employee, JsonRequestBehavior.AllowGet); 
     } 

     employee = new EMPLOYEE(); 
     employee.ID = "Unknown"; 
     employee.NAME = "Unknown"; 
     employee.ORGANIZATION_ID = "Unknown"; 
     employee.WORK_SITE_ID = "Unknown"; 

     return Json(employee, JsonRequestBehavior.AllowGet); 
    } 

Lorsqu'un utilisateur entre un ID d'employé qui n'est pas reconnu, je retourne un objet employé qui a toutes les valeurs de « Unknown ». Cela fonctionne bien. Toutefois, lorsque l'ID employé entré correspond à un résultat dans la base de données, pour une raison quelconque, la condition "else" n'est pas atteinte, bien que l'objet JSON d'un employé soit correctement renvoyé à la vue.

Voir ...

$('#Wwid').change(function() { 

    $("#wwid_alert").hide(); 

    var selectedWwid = $(this).val(); 

    $.getJSON('@Url.Action("checkWwid")', { wwid: selectedWwid }, function (employee) { 
     alert(employee.NAME); 

     if (employee.ID == 'Unknown') { 
      alert(employee.NAME); 
      $("#wwid_alert").show(); 
      $("#wwid_alert").text("This WWID is not in the database; you will not be able to sucessfully submit this form."); 

     } else { // This is not working even though I am getting a JSON result. 

      alert(employee.NAME); 
      $("#wwid_alert").show(); 
      $("#wwid_alert").text(employee.NAME); 
     } 

    }); 

}); 

Par le débogage, je sais le résultat JSON est retourné à la vue. J'ai utilisé ce même algorithme dans une autre application (qui utilise exactement la même base de données), et cela fonctionne très bien. Je ne sais pas comment résoudre ce problème. Toute suggestion ou recommandation serait grandement appréciée. Je vous remercie.

+0

échantillon de votre JSON ?? –

Répondre

0

Maintenant, je suis gêné; Je n'avais pas complètement débogué. Je pensais que parce que le contrôleur avait retourné le contrôle à la vue qu'un résultat Json était retourné. Cependant, après le débogage dans Firebug, j'ai découvert que j'obtenais une erreur Http 500, probablement en raison de la façon dont l'objet Entity Framework était sérialisé par le sérialiseur JSON intégré d'ASP.NET. Plutôt que d'envoyer l'objet EF sous la forme d'un résultat Json, j'ai instancié un nouvel objet et affecté uniquement les propriétés dont j'avais besoin pour le résultat.

Peut-être que j'ai aidé quelqu'un d'autre à résoudre un problème dans le futur. :)

De plus, the following post helped...

1

Salut, vous pouvez également obtenir votre valeur JSON comme cela, il est en dessous

$.ajax({ 
      url: "/City/State", 
      dataType: 'json', 
      data: { countryId: countryID }, 
      success: function (data) { 
       alert(data); 
       $("#stateID").empty(); 
       $("#stateID").append("<option value='0'>--Select State--</option>"); 
       $.each(data, function (index, optiondata) { 
        alert(optiondata.StateName); 
        $("#stateID").append("<option value='" + optiondata.ID + "'>" + optiondata.StateName + "</option>"); 
       }); 
      }, 
      error: function() { 
       alert('Faild To Retrieve states.'); 
      } 

     }); 

essayer je pense que cela vous aidera

Questions connexes