2013-09-27 53 views
1

我有一个不使用任何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

JavaScript本身不能调用服务器端事件。您必须创建一个'WebMethod'或将其转换为MVC,才能从JavaScript调用服务器端代码。 –

回答

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格式的对象等)。

这是服务器端回发事件如何实现自定义服务器控制。

相关问题