Одним из возможных решений было бы создание Webusercontrol с Panel (будет отображаться как DIV) и невидимой кнопкой (Display: none). Нажимая на div, вы можете нажать кнопку для каждого javascript, что приведет к автоматической обратной передаче. В Codebehind вы могли бы поймать это событие ButtonClick и вызвать пользовательское событие (DivClicked). Таким образом, вы можете использовать этот контроль везде. Примерно так:
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
И, например, на любой странице (перетащите ее в дизайнер):
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
Кстати, вы также можете использовать __ doPostback-функцию для события onclick DIV, чтобы вызвать обратную передачу.