Generer un postback et recuperer l'evenement à partir d'un control de votre creation

Description

Ce code montre comment faire un controle effectuant un postback, et ensuite recuperer l'evenement dans une page.

Le code meme du controle est montré ci dessous, il est assez bien commenté, donc je n'en dis pas plus dessus.
Par contre une explication sur comment l'utiliser et peut etre necessaire.

Tout d'abord pour faire un controle de ce genre, il faut créer un nouveau projet : Bibliothèque de controles web, dans visual Studio, une fois la bas, vous mettez le code ci dessous. Ensuite il vous suffit de compiler le projet, et vous avez votre controle sous forme de dll.
Maintenant ouvrez votre projet web dans l'explorateur de solution de Visual Studio, ajouter une reference, recherchez la dll nouvellement créé (dans le dossier bin) puis selectionner et OK.
Ensuite pour ajouter notre controle dans la boite a outil, suffit de cliquer droit dans la boite à outil puis ajouter/supprimer des composants, parcourir, et rechercher la dll, et enfin OK. Vous avez maintenant votre controle dans la boite a outil, vous pourrez le placer sur votre page par simple drag&drop.

Dans le code vous pourrez recuperer l'evenement du mouseover, comme tout les autres evenements, comme ceci :
Private Sub Label1_MouseOver(ByVal sender As Object, ByVal e As System.EventArgs) Handles Label1.MouseOver
'le label a été survolé
End Sub

Source / Exemple :


Imports System.ComponentModel
Imports System.Web.UI

<Assembly: TagPrefix("Moi.MesControles", "MesControles")> 

<ToolboxData("<{0}:Label runat=""server""></{0}:Label>")> Public Class Label
    Inherits System.Web.UI.WebControls.Label

    'si AutopostBack est à true, il y aura un postback lors du passage de la souris sur le label
    Private _AutoPostBack As Boolean
    <Bindable(True), Category("Appearance"), DefaultValue("False")> Property [AutoPostBack]() As Boolean
        Get
            Return _AutoPostBack
        End Get
        Set(ByVal Value As Boolean)
            _AutoPostBack = Value
        End Set
    End Property

    'Evenement qui sera declenché au passage de la souris
    Public Event MouseOver As EventHandler

    'La méthode render permet d'ecrire le rendu HTML du controle
    'Dans notre cas, si _AutoPostBack est à true on rajoute l'attribut onmouseover
    'Page.GetPostBackClientEvent est la fonction qui ecrit le code javascript du postback
    'c'est à dire, le __DoPostBack('','') dans l'attribut, mais aussi le code javascript du _DoPostBack
    'et aussi ecrire les deux champs cachés, il ecrit qu'une seul fois tout ca, s'il est appellé plusieurs fois
    'ensuite apres avoir ajouté ou non l'attribut, on ecrit le reste du controle
    Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
        If _AutoPostBack Then
            output.AddAttribute("onmouseover", "javascript:" & Page.GetPostBackClientEvent(Me, "onMouseOver"))
        End If
        MyBase.Render(output)
    End Sub

    'Quand le label va se charger, on verifie si il vient d'un PostBack, si oui,
    'On regarde si c'est notre controle qui a declenché le postback, et on regarde si
    'l'argument passé est bien "onmouseover", on pourrait imaginer le meme controle qui posséde l'evenement DoubleClick
    'si toutes ces conditions on lance l'evenement via RaiseEvent
    Private Sub Label_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Page.IsPostBack Then
            If Not Page.Request.Params("__EVENTTARGET") Is Nothing AndAlso Page.Request.Params("__EVENTTARGET") = Me.UniqueID AndAlso Page.Request.Params("__EVENTARGUMENT") Is Nothing AndAlso Page.Request.Params("__EVENTARGUMENT") = "onMouseOver" Then
                RaiseEvent MouseOver(Page.Request.Params("__EVENTTARGET"), (New EventArgs).Empty)
            End If
        End If
    End Sub
End Class

Conclusion :


Ce code fait suite à une question dans le forum : http://www.aspfr.com/forum.v2.aspx?rm=1&ID=348336

Le but de ce code est surtout de montrer comment generer un postback à partir d'un control, c'est un exemple tres basique pour bien comprendre les choses.

Si vous avez des questions, commentaires etc... ca se passe en dessous.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.