2014-09-20 3 views
0
var checkedValues = $('.required:checked').map(function() { 
    return this.value; 
}).get(); 

$.getJSON('@Url.Action("testcata", "home")' +"?Type=" + "@(Session["typ"])" + "&city=" + "@(Session["cit"])" + "&chkd=" + checkedValues, 
function (data) { 
    //code 
}) 

Contrôleur:fonction JSON ne passant pas le tableau

public ActionResult testcata(string Type, int? city, int[] chkd) 
{ 
    //code 
} 

Je suis en train d'obtenir les valeurs des cases qui sont vérifiées à passer par la fonction JSON. pourquoi la méthode dans le contrôleur prend null comme argument pour plusieurs valeurs de contrôle sélectionnées? J'ai un paramètre int [] chkd dans la fonction. Il montre null.

+0

Je ne suis pas sûr de la langue côté serveur est-ce. Mais, vous ne devriez obtenir que les paramètres 'Type',' city' et 'chkd' en tant que' get', pas comme transmis en fonction. – Jashwant

+0

je ne suis pas sûr mais si vous voyez ce violon http://jsfiddle.net/khu5oeLc/ voir dans la console si case à cocher est cochée il retourne un tableau avec "on" .. alors au lieu de prendre le tableau de 'int' sur le côté du contrôleur changez le tableau de 'string' à la place. –

+0

passer autant de données dans la chaîne de requête est vraiment une mauvaise idée. vous pouvez utiliser 'JsonResult' au lieu de' ActionResult' qui devrait retourner la réponse 'Json()'. Essayez de faire une demande 'Post' à la méthode. En ce sens, vous devez faire quelques ajustements dans votre code. – Rohit416

Répondre

1

Vous essayez de mettre un tableau sous forme de chaîne. Essayez ceci:

var checkedValues = encodeURIComponent($('.required:checked').map(function(){ 
    return this.value; 
}).get().join()); 
0

Ceci est une sorte de ré-arrangement de votre code.

var checkedValues = $('.required:checked').map(function() { 
    return this.value; 
}).get(); 
//if you are getting correct values here than, 

$.ajax({ 
    type: "POST", 
    url: "/home/testcata", 
    data: JSON.stringify({chkd: checkedvalues}), 
    dataType: "json" 
}).done(function(data){ 
    // your stuff 
}); 

décorez votre méthode du contrôleur avec [HttpPost] si possible. La communication avec les données JSON est relativement sécurisée. :)

+0

Ne pensez pas que vous avez besoin de 'JSON.stringify()' sur {{chkd: checkedvalus} '. jQuery envoie des données très bien sans cela. – PHPglue

+0

oui, d'accord. mais j'ai utilisé 'stringify()' pour une garantie supplémentaire. :) – Rohit416

1

Veuillez d'abord passer votre méthode de GET à POST et suivre le code ci-dessous.

Votre code existant

var checkedValues = $('.required:checked').map(function() { 
return this.value; 
}).get(); 

Nouveau code à ajouter

var Data = new Object(); 
Data.Type = @(Session["typ"]); 
Data.city = @(Session["cit"]); 
Data.chkd = checkedValues; 


$.ajax({ 
type: "POST", 
url: "/home/testcata", 
data: JSON.stringify(Data), 
dataType: "json" 
}).done(function(data){ 
// Required Code 
}); 

code C# Changements

public class Data 
{ 
    string Type {get; set ;}; 
    int city {get; set ;}; 
    int[] chkd {get; set ;}; 
} 


public ActionResult testcata(Data data) 
{ 
    String Type = data.Type; 
    int city = data.city; 
    int[] chkd = data.chkd; // Your Array will be successfully received here. 
} 

J'espère que cela vous aidera, Merci :) Codage heureux

+0

Merci pour votre aide mais je ne voulais pas changer ma méthode getjson car elle est utilisée à différents endroits dans le projet. J'ai utilisé la méthode join et passé la chaîne en tant que param. maintenant tout va bien. :-) –

Questions connexes