2010-10-07 9 views

Répondre

2

Une solution possible serait de créer un Webusercontrol avec un Panel (sera rendu en DIV) et un bouton invisible (Display: none). Onclick de la div vous pouvez cliquer sur le bouton par javascript qui provoquerait un Postback automatique. Dans Codebehind vous attraperiez cet événement ButtonClick et relancez un événement personnalisé (DivClicked). Vous pouvez donc réutiliser ce contrôle partout. Quelque chose comme ceci:

ClickableDiv.ascx

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="ClickableDiv.ascx.vb" Inherits="WebApplication1.ClickableDiv" %> 
<asp:Panel id="TheDiv" runat="server" onMouseOver="this.style.cursor='pointer'" onclick="this.nextSibling.click()" /><asp:Button ID="DivButton" runat="server" /> 

ClickableDiv.ascx Codebehind

Partial Public Class ClickableDiv 
    Inherits System.Web.UI.UserControl 

    Public Event DivClicked(ByVal src As ClickableDiv) 

    Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 
     Me.DivButton.Style.Add("display", "none") 
    End Sub 

    Public ReadOnly Property Div() As Panel 
     Get 
      Return Me.TheDiv 
     End Get 
    End Property 

    Protected Sub DivButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles DivButton.Click 
     RaiseEvent DivClicked(Me) 
    End Sub 

End Class 

Et par exemple dans une page (faites glisser & déposez au concepteur):

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Dim imgTest As New Image 
     imgTest.ImageUrl = "http://skins.gmodules.com/ig/images/logos/approved/white.png" 
     Me.ClickableDiv1.Div.Controls.Add(imgTest) 
    End Sub 

    Private Sub ClickableDiv1_DivClicked(ByVal src As ClickableDiv) Handles ClickableDiv1.DivClicked 
     Dim div As ClickableDiv = src 
    End Sub 

Btw, vous pouvez également utiliser le __doPostback-function sur l'événement onclick DIV pour déclencher une publication.

+0

Ouais, c'est comme ça que je le ferais aussi. +1 – RPM1984

0

1- créer asp caché: bouton

2 sur div clic document.getElementById('<%=HiddenButton.ClientID%>').click(); ce sera le feu Button_Click événement sur le serveur

** ne pas oublier de mettre UseSubmitBehaviour=false pour le bouton caché pour faire fonctionne événement click