创建自定义服务器或用户按钮

时间:2011-02-08 15:34:08

标签: .net custom-controls custom-server-controls

我有一个非常具体的问题。我有一个用户控件(下面的代码),需要像按钮一样。我已经研究过编写自定义服务器控件,但我认为这有点过分了。我遇到的另一个选择是让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

3 个答案:

答案 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似乎可以满足我的需求。