IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

Envoyer des données en POST avec JQuery?


Sujet :

ASP.NET MVC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut Envoyer des données en POST avec JQuery?
    Bonjour à tous,

    Avant le weekend, un petit probleme, super. Donc je fais une application MVC3 et j'utilise JQuery. J'ai fait un drag and drop. Je recupere bien un tableau de nom de responsable que j'ai recuperé dans ma liste HTML. J'aimerais ensuite appelé le controller avec les données récupérées (tableau à 1 dimension). Ainsi, l'action appelée renverrais une vue et la page se rechargerait.

    Pour l'instant, j'ai ma requete qui s'execute bien, (firebug me le dit bien) mais ma page ne se recharge pas. Voila ma fonction JQuery:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /** Fonction de recupération de l'equipe **/
        $("#createTeam").button();
     
        $("#createTeam").click(function () {
            var membres = new Array();
            $("#teamMember").find("li").each(function () {
                membres.push($(this).text());
            });
            $.post("/Administrer/CreerTeam",{membres:membres});
        });
    Au passage, j'utilise normalement ajax(), mais j'ai eu le meme resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      $.ajax({ type: "POST",
                url: "/Administrer/CreerTeam",
                data: "membres="+membres,
                sucess: function (msg) {
                    $("#body").html(msg);
                }
            });
    Donc ici, j'aimerais appelé l'action "CreerTeam" du controler "Administrer". Quand j'appui sur le bouton, j'ai bien la requete qui s'effectue"200 OK13ms" mais la page bouge pas...

    si quelqu’un sait comment faire, merci

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut
    Rebonjour,

    Dans mon exemple, il est impossible de passer un tableau javascript en POST.Il faut, d'apres ce que j'ai compris, passer par un objet JSON. J'ai fini par utiliser un champs caché dans lequel j'écris les noms des membres que je veux enregistrer grace à JQuery. je peux donc recuperer la valeur du input caché dans mon controller.

    J'ai un exemple plus simple. J'ai utiliser un plugin JQuery qui fait office de browser et liste les dossiers sur mon serveur. Quand l'utilisateur clique sur un des fichier, je recupere l'url de ce fichier. Je souhaiterais le passer à mon controller:

    le javascript:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     $('#container_id').fileTree({ root: 'C:/demandes/', folderEvent: 'click', expandSpeed: 750, collapseSpeed: 750, expandEasing: 'easeOutBounce', collapseEasing: 'easeOutBounce', loadMessage: 'Attends un peu,stp...' }, function (file) {
          //file est l'url du fichier cliqué
            alert(file);
            $.ajax({
             type: "POST",
             url: "EnvoyerFS",
            data: "url="+file,
            success: function(msg){
                    alert( "Data Saved: " + msg );
            }
     
            });
        });
    A l'issue de ce code, quand je clique sur un element, la requete s'execute bien:


    mais dans mon controller, j'ai l'action en question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //
    // POST: /Gererdemande/EnvoyerFS
    //recupere la string de recherche et requete la base pour renvoyer les FS //resultats.
            [HttpPost]
            public ActionResult EnvoyerFS(string url)
            {
     
                Response.Write("test");
                return View();
     
            }
    et l'action ne recupere pas le POST en question. Donc ma question est en gros: comment passer des données du javascript à ASP.NET

    Merci d'avance et bonne journée

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    La manière dont tu fais passer ton url n'est pas correcte. En gros le paramètre attendu par ton contrôleur est ma l renseigné.

    La bonne méthode est la suivante :
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     $('#container_id').fileTree({ root: 'C:/demandes/', folderEvent: 'click', expandSpeed: 750, collapseSpeed: 750, expandEasing: 'easeOutBounce', collapseEasing: 'easeOutBounce', loadMessage: 'Attends un peu,stp...' }, function (file) {
          //file est l'url du fichier cliqué
            alert(file);
            $.ajax({
             type: "POST",
             url: "EnvoyerFS",
            data: { url : file },
            success: function(msg){
                    alert( "Data Saved: " + msg );
            }
     
            });
        });

    Tout est dans la manière dont tu renseignes l'attribut data.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut
    Bonjour,

    Merci pour ta réponse. J'ai testé ta solution et j'obtiens le même résultat, à savoir une requête qui est marquée "OK" avec les données en POST qui passe bien, mais le controller ne récupère pas cette valeur.Peut-être faut-t-il ajouter une directive dans le controller pour lui faire comprendre qu'il doit récupérer une requete AJAX? il m'avait semblé voir une méthode du style "isAJAX()" ou quelquechose du genre, mais je retrouve plus la syntaxe.

    Bonne semaine à tous

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je pense que l'url fourni dans ta demande ajax n'est pas correcte. la bonne url devrait plutôt être : Gererdemande/EnvoyerFS

    T'as juste oublié de mentionner le nom de ton contrôleur avant l'action.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut
    J'ai changé l'URL en testant d’abord simplement /EnvoyerFS puis /Gererdemande/EnvoyerFS pour obtenir le même résultat: la requete est OK mais le contrôler ne fais rien.
    Puis j'ai testé une URL du style "RepInexistant/Gererdemande/EnvoyerFS" pour vérifier que les deux URL précedentes sont correctes et j'obtiens bien une erreur de type "chemin inexistant". Donc les deux url semblent bonnes et sont bien redirigées par le "RegisterRoutes" du global.asax.

    Donc cela ne semble pas être un probleme d'URL...

Discussions similaires

  1. envoyer des données via POST
    Par sohaieb dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/05/2010, 01h11
  2. envoyer des donnée en post au popup
    Par bourbita.thameur dans le forum Langage
    Réponses: 3
    Dernier message: 29/04/2009, 15h26
  3. Renvoyer des données en POST avec redirection
    Par Aspic dans le forum Langage
    Réponses: 2
    Dernier message: 11/08/2008, 22h33
  4. Envoyer des données par post sans formulaire
    Par webrider dans le forum Langage
    Réponses: 12
    Dernier message: 31/03/2007, 19h11
  5. Réponses: 4
    Dernier message: 03/05/2006, 18h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo