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 Discussion :

[Ajax, c#]Appeler méthode serveur à partir du javascript


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Points : 80
    Points
    80
    Par défaut [Ajax, c#]Appeler méthode serveur à partir du javascript
    Bonjour à tous,

    je souhaiterai fermer la session à la fermeture de la fenêtre de l'explorateur par l'utilisateur. En même temps de fermer la fenêtre, je dois modifier un champs dans la base de données qui spécifie comme quoi l'utilisateur s'est déconnecté.

    J'ai essayé la méthode proposée dans la FAQ qui exécute du code javascript sur l'évènement onbeforeunload, mais malheureusement, cela ne fonctionne pas.

    J'ai alors penser à utiliser Ajax: est-il possible d'appeler une méthode serveur à partir du javascript? Si cela est faisable, alors je pourrais appeler ma méthode sur l'évènement javascript cité ci-dessus.

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Oui c'est possible.
    J'ai un bout de code qq part, attends

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Points : 80
    Points
    80
    Par défaut
    Merci. j'attends ça avec impatience.

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Mon code permet de remplir une listbox en AJAX sur le OnChange d'une drop down list

    Voilà la dropdownlist
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <asp:DropDownList ID="DDLRegions" runat="server" DataSourceID="SqlDataSource1"
                                                           DataTextField="Reg_Nom" DataValueField="Reg_Id"
                                                           OnChange="ChargerAgencesLocales(this.options[this.selectedIndex].value,'context'); ">
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <script language="javascript">
    function FonctionClienteDeRappel(result, context)
    {
          var ListBoxAgences = document.forms[0].elements['<%=LBAgences.UniqueID%>'];
          if (!ListBoxAgences){
             return;
          }
          ListBoxAgences.length = 0;
          if (!result){
              return;
          }
          var rows = result.split('|'); 
          for (var i = 0; i < rows.length; ++i){
                var option = document.createElement("OPTION");
                option.value = rows[i];
                option.innerHTML = rows[i];     
                ListBoxAgences.appendChild(option);     
           }
    }
    function FonctionClienteDeRappelEnCasDErreur(result, context){
          alert(result);
    }
    </script>
    Et le code behind
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            'Récupérer une référence vers la fonction cliente qui va initier le callback
            Dim ReferenceVersFonctionClienteInitiatriceDuCallBack As String = _
                Page.ClientScript.GetCallbackEventReference(Me, _
                                    "arg", _
                                    "FonctionClienteDeRappel", _
                                    "context", _
                                    "FonctionClienteDeRappelEnCasDErreur", _
                                    False)
            'A l'aide de la référence obtenue précédemment, générer puis enregistrer le script client
            'correspondant à la fonction qui va initier le callback
            Dim ScriptFonctionCliente As String = "function ChargerAgencesLocales(arg,context){" & _
                                                                  ReferenceVersFonctionClienteInitiatriceDuCallBack + ";}"
            Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), _
                                                        "ChargerAgencesLocales", _
                                                        ScriptFonctionCliente, _
                                                        True)
        End Sub
     
    Private _resultat As String
     
        Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
            Return _resultat
        End Function
     
        Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
     
    Select Case eventArgument
                Case 19
                    _resultat = "blabla"
                Case Else
                     _resultat = "autre blabla"
            End Select
        End Sub
    Ta page doit également implémenter ICallbackEventHandler


    Toi, tu devras mettre ton code pour killer ta session dans Public Sub RaiseCallbackEvent

    PS: c'est du VB

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Points : 80
    Points
    80
    Par défaut
    Alors voilà, je donne la solution que j'ai trouvé et qui fonctionne.

    C'est celle proposée par asp.net Ajax avec les PageMethods.

    http://www.geekzilla.co.uk/View7B75C...3138DFC671.htm

    Vous pouvez allé voir sur le site ci-dessus.

    En deux mots, le but est d'appeler à partir du javascript une méthode serveur du code behind.

    Pour cela il faut:

    -Créer une méthode static dans le code behind (c'est la méthode qui sera appelée dans le javascript)

    -Ajouter les tag WebMethod et ScriptMethod à notre méthode serveur comme ceci:
    [System.Web.Services.WebMethod]

    [System.Web.Script.Services.ScriptMethod]

    -Dans notre fonction javascript on appelle notre méthode serveur de la façon suivante:

    PageMethods.NotreMethodeServeur().

    On peut bien entendu avoir des paramètres dans notre méthode et retourner des valeurs également.

    -Ne pas oublier de mettre EnablePageMethods=true dans le ScriptManager.

    Attention:
    La méthode serveur ne peut pas se trouver dans le code behind de la masterpage. Cela ne fontionne pas et vous aurez l'erreur PageMethods est indéfini.

    Si comme moi vous en avez besoin dans toute vos pages (puisque je veux détecter la fermeture de fenetre et mettre à jour un champs en base), alors vous pouvez créer une BasePage qui sera héritée par toute vos pages et vous pourrez mettre votre méthode serveur static à l'intérieur.

    Le code javascript quant à lui peut se trouver dans la masterpage ou alors dans un fichier.js.

    Voilà voilà...

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Pas mal, mais ça oblige à avoir AJAX

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Points : 80
    Points
    80
    Par défaut
    Effectivement...

    Par contre j'ai un autre souci. Je déclenche mon javascript sur l'évènement onunload, mais malheureusement cet évènement est associé non seulement à la fermeture de fenêtre mais aussi au changement de page!!!!

    N'existe t il pas un évènement dédié à la fermeture de fenêtre en javascript?

  8. #8
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Il semblerait que tu passes dans Sesssion_End du global.asax qd tu fermes le navigateur donc tu pourrais faire le traitement là.

    A vérfier qd meme

    edit: ça marche pas non

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Points : 80
    Points
    80
    Par défaut
    Non j'avais déjà essayé.

Discussions similaires

  1. [Webservice] Appeler un webservice à partir de Javascript
    Par mr.saucisse dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 22/12/2010, 17h24
  2. [AJAX] Synchroniser appels serveurs..
    Par jeb001 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/10/2007, 09h23
  3. Appel Méthode 4D par Javascript
    Par mxh77 dans le forum 4D
    Réponses: 2
    Dernier message: 02/10/2006, 14h48
  4. [AJAX] probleme appelle page XML sur autre serveur
    Par ldcarpathes dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/08/2006, 18h35

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