2013-05-07 1 views
4

J'essaye de faire un appel ajax à la méthode du contrôleur. sans paramètre cela fonctionne bien. Une fois que j'ajoute le paramètre, je reçois toujours un paramètre nul pour le cotroller. Je pense que j'ai correctement fait le paramètre passant dans l'appel ajax.Passer des paramètres dans un appel ajax

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('#lstStock').change(function() { 
       var serviceURL = '<%= Url.Action("GetStockPrice", "Delivery") %>'; 
       var dropDownID = $('select[id="lstStock"] option:selected').val(); 
      alert(dropDownID); // here i get the correct selected ID 
       $.ajax({ 
        type: "POST", 
        url: serviceURL, 
        data: '{"stockID":"' + dropDownID + '"}', 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: successFunc, 
        error: errorFunc 
       }); 

       function successFunc(data, status) { 

        alert(data.Result); 


       } 

       function errorFunc() { 
        alert('error'); 
       } 
      }) 
     }); 
    </script> 

Controller:

[HttpGet] 
     public ActionResult GetStockPrice() 
     { 
      return View(); 
     } 

     [HttpPost] 
     [ActionName("GetStockPrice")] 
     public ActionResult GetStockPrice1(string stockID)//I get the null parameter here 
     { 
      DeliveryRepository rep = new DeliveryRepository(); 
      var value = rep.GetStockPrice(stockID); 
      return Json(new { Result = value }, JsonRequestBehavior.AllowGet); 

     } 

Répondre

12

C'est parce que vous traitez les données comme une chaîne

data: '{"stockID":"' + dropDownID + '"}', 

vous pouvez le remplacer par:

data: { stockID: dropDownID }, 

dans certains cas, selon la paramètre déclaré dans votre méthode de contrôleur, vous devez sérialiser les données. Si vous devez faire cela, alors c'est comment vous le faire:

var o = { argName: some_value }; 
$.ajax({ 
    // some other config goes here 
    data: JSON.stringify(o), 
}); 
+1

avec votre solution J'ai également dû supprimer contentType: "application/json; charset = utf-8" alors seulement il a commencé à fonctionner. une idée? – chamara

+1

Vous avez besoin de l'application 'contentType:"/json "' en faisant stringify pour indiquer au navigateur de bien envoyer les données en json. Le paramètre contentType par défaut fonctionnera lors de la transmission de données telles que '{stockID: dropDownID}' car il est interprété comme un objet/une donnée json valide. –

2

Essayez d'indiquer:

data: { stockID : dropDownID }, 

On dirait que vous passez en "stockID" pas stockID. Un bon outil à utiliser pour cela est Fiddler, il vous permettra de voir si l'action du contrôleur est frappée et quelles données ont été envoyées sur le serveur.

+0

avec votre solution que je devais aussi retirer contentType: « application/JSON; charset = utf-8 » alors seulement il a commencé à travailler. une idée? – chamara

3

essayer data: { stockID : dropDownID},

$('#lstStock').change(function() { 
    var serviceURL = '<%= Url.Action("GetStockPrice", "Delivery") %>'; 
    var dropDownID = $('select[id="lstStock"] option:selected').val(); 
        // $(this).val(); is better 
     alert(dropDownID); // here i get the correct selected ID 
      $.ajax({ 
       type: "POST", 
       url: serviceURL, 
       data: { stockID : dropDownID}, 
       .... 
+0

avec votre solution j'ai également dû supprimer contentType: "application/json; charset = utf-8" alors seulement il a commencé à travailler. une idée? – chamara

+0

Vérifiez [HERE] (http://api.jquery.com/jQuery.ajax/) –

Questions connexes