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

  1. #1
    Membre du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    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 du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    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 du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    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 du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    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...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Tu dois spécifier l'url sans mettre le '/' au début soit ça => "Gererdemande/EnvoyerFS".

    Sinon pour être sûr que ton contrôleur reçoit ou ne reçoit pas la requête utilises Fiddler pour sniffer l'envoi de ta requête

  8. #8
    Membre du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    Par défaut
    Si j'enleve le "/" de "/Gererdemande/EnvoyerFS", je lui dis que c'est un chemin relatif et ça plante. En effet, Firebug m'indique que le chemin:
    Donc quand on met un chemin relatif, il m'indique bien que l'appli route la requete vers le controller par défaut et vers l'action indiquée(ici le controler dans lequel je suis est bien "Gererdemande" et l'action "EnvoyerFS").

    Pour ce qui est du suivi des requetes, Firebug me dit bien que la requete est OK...c'est sans doute l'architecture MVC3 qui attends une indication spéciale pour capter le POST, la requete semble bonne

  9. #9
    Membre du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    Par défaut
    J'ai trouvé (merci le chat de developpez ) un article overflow qui parle de ce rechargement de page via ajax de la maniere suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $.ajax({
        url: '@Url.Action("foo")',
        type: 'POST',
        data: { name: 'john', age: 20 },
        success: function(result) {
            // TODO:
        }
    });
    J'ai testé, et là, cruelle desilusion, la ligne "url: '@Url.Action("foo")'," ne passe pas. En effet, il ne m'interprete pas le @Url.Action(), ce que je trouve normal, j'avais jamais vu du code serveur dans du javascript...comme du code php dans du javascript, sinon, pourquoi on se ferait on s’embêterait à passer par des JSON? Enfin bref, si quelqun a une solution pour interpreter ce code. Sinon j'ai regarder du coté du unobtrusive javascript, mais bon, je cherche juste à recharger une page, pas à envoyer un formulaire,

    Bonne journée,

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