如何在回发时捕获和触发用户控件的自定义事件

时间:2013-09-27 20:03:31

标签: c# javascript asp.net user-controls

我有一个不使用任何asp.net控件的用户控件(例如foo.ascx)。我没有按钮点击事件或任何我可以依赖的事件。所以以下不是一个选项:

void Page_Load(object sender, EventArgs e) {
  MyButton.Click += MyButton_Click; // <-- I can't do this, there are no asp.net controls
}

void MyButton_Click(object sender, EventArgs e) {
    OnItemSelected("foo"); // fire my custom event
}

我需要触发一个ItemSelectedEvent。我知道如何制作类似的方法和事件

public event EventHandler<MyEventArgs> ItemSelected;

void OnItemSelected(string selectedItem) {
  var tmp = ItemSelected;
  if (tmp != null)
    tmp(this, new MyEventArgs { SelectedItem = selectedItem });
}

我需要在客户端站点上使用哪些javascript来指示我正在触发ItemSelected事件(即如何正确地回发到服务器),以及我需要在代码隐藏页面中实现什么捕获该信息并调用我的OnItemSelected方法?

1 个答案:

答案 0 :(得分:4)

如果我是正确的并且您正在使用ASP.NET WebForm,那么您需要为您的用户Control实现IPostBackEventHandler接口。此接口定义ASP.NET服务器控件必须实现以处理回发事件的方法(RaisePostBackEvent)。

  // Define the method of IPostBackEventHandler that raises your server side events. 
  public void RaisePostBackEvent(string eventArgument){
     OnItemSelected("foo"); // fire my custom event
  }

然后在客户端,您可以通过调用以下代码来执行服务器端事件:

__doPostBack(UniqueID, 'eventArgument');

其中UniqueID - 用户控件的唯一ID。 eventArgument可以是空的或任何你想要的值(例如json格式的对象等)。

这是为自定义服务器控件实现服务器端回发事件的方法。

相关问题