Accueil > > > .NET 2 - UTILISATION DU CLIENTCALLBACK AU SEIN D'UN CONTROLE + DECLENCHEMENT D'EVENEMENT
.NET 2 - UTILISATION DU CLIENTCALLBACK AU SEIN D'UN CONTROLE + DECLENCHEMENT D'EVENEMENT
Information sur la source
Description
J'ai fait ce petit controle pour expliquer comment fonctionne le ClientCallBack et ce qu'on peut en faire. Ce controle est volontairement trés simple et en l'etat completement inutile, mais c'est fait exprés pour que l'on puisse bien comprendre le fonctionnement. Ce controle ecrit l'heure du serveur, et se remet à jour automatiquement lorsqu'on passe la souris dessus grace au ClientCallBack ( Ajax ) Ce controle declenche un evenement mouseOver son delegates possede 3 arguments, les 2 premiers classique, un object qui est le controle, et un eventArgs, le 3eme est ce qui devra etre renvoyé à javascript, cet argument est passé en reférence. Vous pourrez trouver d'avantages d'explications dans un article qui se trouve ici http://www.c2i.fr/code.aspx?IDCode=610
Source
- 'Le controle
- Imports System
- Imports System.Collections.Generic
- Imports System.ComponentModel
- Imports System.Text
- Imports System.Web
- Imports System.Web.UI
-
- <ToolboxData("<{0}:ControlExemple runat=""server""></{0}:ControlExemple>")> _
- Public Class ControlExemple
- Inherits Control
- Implements ICallbackEventHandler
-
-
- Public Event MouseOver As EventHandler(Of MouseOverEventArgs)
- ' delegate un peu spécial, il a la meme signature que les autres, mais prend en plus un paramètre par référence
- Public Delegate Sub ExempleEventHandler(ByVal sender As Object, ByVal e As EventArgs)
-
- 'on ecrit le controle en surchargeant le render
- Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
- writer.Write("Survoler l'heure pour la mettre à jour <br /> <span ")
- writer.WriteAttribute("id", Me.UniqueID)
- writer.WriteAttribute("onmouseover", _
- Me.Page.ClientScript.GetCallbackEventReference(Me, _
- "this.innerHTML", "__onCallBackTermine", "'" & Me.UniqueID & "'"))
- writer.Write(">")
- writer.Write(Now.ToLongTimeString)
- writer.Write("</span>")
- MyBase.Render(writer)
- End Sub
-
- ' function appelé quand la souris passe sur notre lien
- ' c'est ici qu'on declenche notre evenement
- Public Function RaiseCallbackEvent(ByVal eventArgument As String) As String Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
- Dim e As New MouseOverEventArgs(eventArgument)
- RaiseEvent MouseOver(Me, e)
- Return e.NouvelleHeure
- End Function
-
- ' Ici on ecrit la fonction qui sera appellé au retour du callback
- Private Sub ControlExemple_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
- If Not Me.Page.ClientScript.IsClientScriptBlockRegistered("callback") Then
- Dim script As New StringBuilder
- script.AppendLine("function __onCallBackTermine(result, context)")
- script.AppendLine("{")
- script.AppendLine("document.getElementById(context).innerHTML = result;")
- script.AppendLine("}")
- Me.Page.ClientScript.RegisterClientScriptBlock(GetType(ControlExemple), "callback", script.ToString, True)
- End If
- End Sub
-
- End Class
-
- Public Class MouseOverEventArgs
- Inherits EventArgs
-
- Private _nouvelleHeure As String
-
- Public Property NouvelleHeure() As String
- Get
- Return _nouvelleHeure
- End Get
- Set(ByVal value As String)
- _nouvelleHeure = value
- End Set
- End Property
-
-
- Private _AncienneHeure As String
-
- Public ReadOnly Property AncienneHeure() As String
- Get
- Return _AncienneHeure
- End Get
- End Property
-
- Public Sub New(ByVal ancienneheure As String)
- _AncienneHeure = ancienneheure
- End Sub
-
- End Class
-
- ' La page
-
- Partial Class Default3
- Inherits System.Web.UI.Page
-
- ' cet evenement est declenché coté serveur quand le client passe la souris sur l'heure, attention
- ' la page n'est pas renvoyé, c'est juste l'argument result qui est renvoyé par javascript
- Protected Sub ControlExemple1_MouseOver(ByVal sender As Object, ByVal e As System.EventArgs) Handles ControlExemple1.MouseOver
- e.NouvelleHeure = Now.ToLongTimeString
- End Sub
-
- End Class
'Le controle
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Text
Imports System.Web
Imports System.Web.UI
<ToolboxData("<{0}:ControlExemple runat=""server""></{0}:ControlExemple>")> _
Public Class ControlExemple
Inherits Control
Implements ICallbackEventHandler
Public Event MouseOver As EventHandler(Of MouseOverEventArgs)
' delegate un peu spécial, il a la meme signature que les autres, mais prend en plus un paramètre par référence
Public Delegate Sub ExempleEventHandler(ByVal sender As Object, ByVal e As EventArgs)
'on ecrit le controle en surchargeant le render
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
writer.Write("Survoler l'heure pour la mettre à jour <br /> <span ")
writer.WriteAttribute("id", Me.UniqueID)
writer.WriteAttribute("onmouseover", _
Me.Page.ClientScript.GetCallbackEventReference(Me, _
"this.innerHTML", "__onCallBackTermine", "'" & Me.UniqueID & "'"))
writer.Write(">")
writer.Write(Now.ToLongTimeString)
writer.Write("</span>")
MyBase.Render(writer)
End Sub
' function appelé quand la souris passe sur notre lien
' c'est ici qu'on declenche notre evenement
Public Function RaiseCallbackEvent(ByVal eventArgument As String) As String Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
Dim e As New MouseOverEventArgs(eventArgument)
RaiseEvent MouseOver(Me, e)
Return e.NouvelleHeure
End Function
' Ici on ecrit la fonction qui sera appellé au retour du callback
Private Sub ControlExemple_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
If Not Me.Page.ClientScript.IsClientScriptBlockRegistered("callback") Then
Dim script As New StringBuilder
script.AppendLine("function __onCallBackTermine(result, context)")
script.AppendLine("{")
script.AppendLine("document.getElementById(context).innerHTML = result;")
script.AppendLine("}")
Me.Page.ClientScript.RegisterClientScriptBlock(GetType(ControlExemple), "callback", script.ToString, True)
End If
End Sub
End Class
Public Class MouseOverEventArgs
Inherits EventArgs
Private _nouvelleHeure As String
Public Property NouvelleHeure() As String
Get
Return _nouvelleHeure
End Get
Set(ByVal value As String)
_nouvelleHeure = value
End Set
End Property
Private _AncienneHeure As String
Public ReadOnly Property AncienneHeure() As String
Get
Return _AncienneHeure
End Get
End Property
Public Sub New(ByVal ancienneheure As String)
_AncienneHeure = ancienneheure
End Sub
End Class
' La page
Partial Class Default3
Inherits System.Web.UI.Page
' cet evenement est declenché coté serveur quand le client passe la souris sur l'heure, attention
' la page n'est pas renvoyé, c'est juste l'argument result qui est renvoyé par javascript
Protected Sub ControlExemple1_MouseOver(ByVal sender As Object, ByVal e As System.EventArgs) Handles ControlExemple1.MouseOver
e.NouvelleHeure = Now.ToLongTimeString
End Sub
End Class
Conclusion
Cette technique à l'air génial mais il ne faut pas oublier que la requete a été effectué via javascript et que la response ne comportera QUE le resultat de la fonction RaiseCallbackEvent. Toutefois la page passera par tous les autres evenements excepté le render, y compris le load de la page ...
Donc si vous avez des traitements lourds et inutile pour un callBack, qui se font dans le page_load, il vous faudra vérifier si la requete provient d'un CallBack. Tout comme on avait la propriété page.isPostBack pour savoir si la page provient d'un postback on a naturellement la propriété page.isCallBack qui fera ce que son nom indique.
Ceci est bien sur du .net 2 et impossible en .net 1 (ou alors extremement compliqué)
Historique
- 26 juin 2005 21:14:40 :
- MAJ
- 27 juin 2005 13:45:19 :
- rajout du zip + lien de l'article
- 05 juillet 2005 16:04:38 :
- maj
- 07 août 2005 19:00:44 :
- Erreur dans le delegate ...
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
ajax control toolkit et formview ca coince [ par jirap ]
Bonjour,ValidatorCalloutExtender, nouveauté dans les objets d'AjaxControlToolkit fonctionne du feu de dieu, dans un formulaire simple. Mais dès qu'il
comment installer le toolkit ? [ par hay2006 ]
salut,je veins de decouvrir Ajax et ses possibiltés de merveilles avec son control toolkit.mais malheureusement, je ne sias pas comment l'installer po
Control ajax Reorderlist [ par yanis7518 ]
Salut a tous.Quelqu'un aurait-il deja utilisé le control ajax reorderlist??? parce que j'arrive pas a faire comme dans l'exemple donner sur le site.en
Web Custom Event et Javascript [ par ApiO ]
Salut tout le monde,Je développe actuellement un site web (asp/vb) sous vs2005. J'ai récemment ajouté à la solution d'un projet un "Web User Control".
Utilisation d'event d'un user control vers page parent [ par manu_sharp ]
Bonjour et bonne année 2008, J'aimerai savoir si cque je fais est correct en ASP. J'ai un page qui contient un user control.
Répercuter un event d'une page dans un usercontrol [ par Rredeyes ]
Bonjour à tous,J'ai une page qui est contenue dans une master page. cette master page contient des boutons edit-new-delete.Dans la page, je charge dyn
Comment exécuter un event d'un custom control avant le page load. [ par rammstein ]
Bonjour, je voudrais savoir comment exécuter un event d'un custom control avant le page load.Je sais que cela est possible mais je n'arrive pas à trou
Expression reguliere et mise en forme d'une ValidatorCalloutExtender (ajax Control Toolkit) [ par nicolas4200 ]
Bonjour à tous,Je me permet de vous solliciter à nouveau afin de résoudre deux soucis qui ont un rapport avec la validation.1/Le premier concerne les
comment ajouter ajax control toolkit [ par faridas ]
salut tout le monde! je voudrais savoir comment installer ou ajouter ajax control toolkit j'utilise vb 2005 et framework sdk 2.0 merci d'avance de v
Mettre un site Ajax en production [ par lelynx ]
Salut, J'ai une application Ajax développée avec VS2008. Elle est composée d'une page aspx dans laquelle se trouve le code js. La partie communicatio
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
VB.NETVB.NET par hajourawm
Cliquez pour lire la suite par hajourawm URL REWRITINGURL REWRITING par hudon77
Cliquez pour lire la suite par hudon77
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|