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
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
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
ajax master page/redirect [ par foufoulol ]
Bonjour, Est-il possible de passer d'une page héritant d'une masterpage a une autre héritant du même masterpage sans chargement de page ? J'ai utilisé
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : FORMULAIRERE : FORMULAIRE par ap24dp
Cliquez pour lire la suite par ap24dp RE : FORMULAIRERE : FORMULAIRE par Megafan
Cliquez pour lire la suite par Megafan FORMULAIREFORMULAIRE par ap24dp
Cliquez pour lire la suite par ap24dp
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|