Je veux appeler la méthode d'action (AddCompare) en utilisant une requête Ajax à la vue,
Mon problème est que le paramètre envoyé à AddCompare Action a toujours une valeur nulle, Alors que la valeur du paramètre dans la fonction AddToCompare est correcte
ceci est mon code
Vue:
public JsonResult AddCompare(int id) { //id is zero !!! int param=id; }
Controller
@model IEnumerable<Products> @foreach (var item in Model) { <li> <div class="left-block"> <div class="quick-view"> <a title="Add To Compare" class="heart" href="#" onclick="AddToCompare(15)"></a> </div> </div> </li> } <script> function AddToCompare(param) { alert(param); //display correct value 15 $.ajax({ type: "GET", url: "@Url.Action("AddCompare")", contentType: "application/json; charset=utf-8", dataType: "json", data: JSON.stringify({ id: param }), success: function (response) { var myObject = eval('(' + response.d + ')'); if (myObject > 0) { $(".errMsg").append("<ul><li>Data saved successfully</li></ul>"); } else { $(".errMsg").append("<ul><li>Opppps something went wrong.</li></ul>"); } $(".errMsg").show("slow"); }, error: function (response) { alert(response.status + ' ' + response.statusText); } }); } </script>
Où est le problème?
3 Réponses :
Dans votre appel AJAX, vous n'avez pas besoin de stringify
[HttpGet] public JsonResult AddCompare(int id) { }
Décorez votre méthode d'action avec HttpGet
même s'il s'agit de GET
par défaut. Juste une meilleure pratique.
$.ajax({ // your code data: {id: param},
pas d'erreur ou d'exception, seule la valeur d'id dans Action est zéro
J'ai utilisé le code ci-dessus pour tester localement sur ma machine, cela fonctionne. Vérifiez vos onglets de réseau si elle passe cette valeur, vérifiez également vos itinéraires.
Puisque vous utilisez un verbe Get, vous pouvez faire ceci:
$.ajax({ type: "GET", url: "/Controller/Action?ID=" + id, dataType: "json" }).done(function (response) { //response code here });
Modifiez le contrôleur et l'action selon vos besoins et vous pouvez ajouter d'autres paramètres à l'ajax si nécessaire. p >
essayez d'utiliser
$.get(URL,data,function(data,status,xhr),dataType)
voici la syntaxe
$.get
Pouvez-vous essayer d'utiliser le type: "POST" dans votre requête Ajax? Je pense que dans une demande GET, les paramètres doivent être dans l'URI.
oui, j'utilise POST dans la requête Ajax mais je ne résous pas
essayez $ .get, c'est la syntaxe $ .get (URL, données, fonction (données, état, xhr), dataType)
@Bosco. Yesssss, tankez-vous. s'il vous plaît poster cette réponse pour j'accepte
Pouvez-vous essayer de définir processData: false dans votre appel Ajax?