我有一个非常具体的问题。我有一个用户控件(下面的代码),需要像按钮一样。我已经研究过编写自定义服务器控件,但我认为这有点过分了。我遇到的另一个选择是让div标签触发javascript onclick并触发asp:按钮点击事件。但我也觉得这也很hacky。
我正在寻找的解决方案是,无论何时单击用户控件,它都会触发onClick事件(就像普通按钮一样,除了我想要的标记)。
(用户控制代码)字体有css样式,不应影响问题。
<div style="border:2px solid black; background-color:white" >
<div>
<asp:Label ID="lblMeetingCityState" runat="server" Text='<%# Eval("City") %>'></asp:Label>
</div>
<div>
<asp:Label ID="lblMeetingDate" runat="server" Text='<%# Eval("MeetingDate") %>'></asp:Label>
</div>
<div>
<asp:Label ID="lblMeetingSite" runat='server' Text='<%# Eval("Location") %>'></asp:Label>
</div>
</div>
代码隐藏在点击
上引发事件<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Partial Public Class MeetingButton
Inherits System.Web.UI.UserControl
Implements System.Web.UI.IPostBackEventHandler
Public Event Click As EventHandler
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Overridable Sub OnClick(ByVal E As EventArgs)
RaiseEvent Click(Me, E)
End Sub
Public Sub RaisePostBackEvent(ByVal eventArgument As String) _
Implements IPostBackEventHandler.RaisePostBackEvent
OnClick(New EventArgs())
End Sub
End Class
答案 0 :(得分:1)
IPostBackEventHandler Interface将允许您这样做。基本上在用户控件后面的代码中添加以下内容:
public class MyUserControl: Control, IPostBackEventHandler {
// Defines the Click event.
public event EventHandler Click;
//Invoke delegates registered with the Click event.
protected virtual void OnClick(EventArgs e) {
if (Click != null) {
Click(this, e);
}
}
// Define the method of IPostBackEventHandler that raises change events.
public void RaisePostBackEvent(string eventArgument){
OnClick(new EventArgs());
}
}
答案 1 :(得分:1)
在您的用户控制代码后面,使用ClientScriptManager.GetPostBackEventReference方法。
答案 2 :(得分:0)
asp:linkbutton似乎可以满足我的需求。