2009-04-13 6 views
2

J'ai une page de recherche où le haut de la page est un critère de recherche avec un bouton de recherche. Le bas de l'écran est le résultat de la pression sur le bouton de recherche. Dans ce cas, j'ai 6 critères de recherche différents que l'utilisateur peut entrer. Je voudrais regrouper tous les critères dans une classe afin que mon action Controller puisse lire l'objet JSON en tant que classe. En utilisant FireBug, je peux voir que mon JSON est construit correctement. En utilisant le débogueur, je sais que mon contrôleur/action est viré. Cependant quand je regarde l'objet de classe avec le débogueur dans le contrôleur/action, toutes les propriétés sont nulles ou nulles.JQuery utilisant Json pour appeler Controller/Action

Voici mon contrôleur .... [AcceptVerbs (HttpVerbs.Post)] publique ActionResult GetStudentByCritera (StudentSearchCriteraCV critera) {// Obtention des données ViewData [ "MAINDATA"] = studentBLLHdl.StudentFind (critera); return Voir(); }

Voici le JavaScript/JQuery qui appelle le contrôleur ... fonction LoadResultTable() { // construire objet JSON envoyer var = dataToSend BuildJson()

 $.ajax({ 
      url: "GetStudentByCritera", 
      type: 'POST', 
      data: dataToSend, 
      dataType: 'json', 
      contentType: "application/json; charset=utf-8", 
      beforeSend: ClientSideValidate, 
      success: function(result) 
      { 
       alert(result.Result); 
       $('#SearchResult').html(result.Result).show(); 
       // UnBlock UI 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) 
      { 
       // UnBlock UI 

       // not sure how to handel error 
       alert("error happen when posting to 'GetStudentByCritera'") 

       // typically only one of textStatus or errorThrown 
       // will have info 
       this; // the options for this ajax request 
      } 


     }); 
    } 

    function BuildJson() 
    { 
     // building Json    

     var dataForClass = { "StudentSearchCriteraCV" : [{ 
      "StudLname": $("input[name='StudentSearchCriteraCV.StudLname']").val(), 
      "StudFname": $("input[name='StudentSearchCriteraCV.StudFname']").val(), 
      "Ssn": $("input[name='StudentSearchCriteraCV.Ssn']").val(), 
      "StudId": $("input[name='StudentSearchCriteraCV.StudId']").val(), 
      "Sex": $("input[name='StudentSearchCriteraCV.Sex']").val(), 
      "Race": $("input[name='StudentSearchCriteraCV.Race']").val() 
      }]}; 

     return $.toJSON(dataForClass); 
    } 

    function ClientSideValidate() 
    { 
     // Block the UI 
     alert("In the ClientSideValidate"); 

     // if error UNBlock UI 
     // return true if client side data is good. 

     return true; 
    } 


</script> 

Répondre

0

Je crois que votre valeur JSON doit être entre guillemets, sauf s'il s'agit d'un nombre.

"StudFname": '"' + $("input[name='StudentSearchCriteraCV.StudFname']").val() + '"', 

Je ne l'ai pas utilisé .toJSON(), mais je crois qu'il transforme votre objet JSON dans une chaîne. Puisque vous créez votre objet juste pour le transformer en chaîne immédiatement, pourquoi ne pas le créer comme une chaîne pour commencer? C'est ce que je faisais quand je suis tombé sur ce problème (débogueur montrant des zéros pour les valeurs.)

var dataForClass = '{ "StudentSearchCriteraCV" : [{ ' + 
     '"StudLname": "' + $("input[name='StudentSearchCriteraCV.StudLname']").val() + '", ' + 
     '"StudFname": "' + $("input[name='StudentSearchCriteraCV.StudFname']").val() + '", ' + 
     '"Ssn": "' + $("input[name='StudentSearchCriteraCV.Ssn']").val() + '", ' + 
     '"StudId": ' + $("input[name='StudentSearchCriteraCV.StudId']").val() + ', ' + //assuming StudID is a number 
     '"Sex": "' + $("input[name='StudentSearchCriteraCV.Sex']").val() + '", ' + 
     '"Race": "' + $("input[name='StudentSearchCriteraCV.Race']").val() +'" ' + 
     '}]}'; 
3

Votre appel ajax est juste un message HTTP asynchrone, par conséquent, la paramter de données ne peut être la clé des paires de valeurs, pas un objet JSON . Si vous aplatissez dataForClass, cela fonctionnera.

Questions connexes