создать пользовательский сервер или пользовательскую кнопку - PullRequest
0 голосов
/ 08 февраля 2011

У меня очень специфическая проблема.У меня есть пользовательский элемент управления (код ниже), который должен действовать как кнопка.Я занимался написанием пользовательского серверного элемента управления, но я думаю, что это уже слишком.Другая опция, с которой я столкнулся, это то, что тег div запускает щелчок JavaScript и запускает событие нажатия кнопки asp: button.Но я также чувствую, что это тоже хакерство.

Решение, которое я ищу, состоит в том, что всякий раз, когда пользователь нажимает на элемент управления, он запускает событие 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 ]

1 голос
/ 08 февраля 2011

В своем коде управления пользователя используйте метод ClientScriptManager.GetPostBackEventReference .

1 голос
/ 08 февраля 2011

Интерфейс IPostBackEventHandler позволит вам сделать это. В основном в коде вашего пользовательского элемента управления добавьте следующее:

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());
      }

}
0 голосов
/ 08 февраля 2011

Кнопка asp: link, кажется, делает то, что мне нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...