(看了MSDN,明白了点,贴在下面)
要使控件捕获回发事件,控件必须实现System.Web.UI.IPostBackEventHandler 接口。此接口的协定允许控件在服务器上引发事件来响应来自客户端的回发。IPostBackEventHandler 接口包含一个方法。
[C#] public interface IPostBackEventHandler{ void RaisePostBackEvent(string eventArgument); } [Visual Basic] Public Interface IPostBackEventHandler Sub RaisePostBackEvent(eventArgument As String) End Interface
回发后,页框架就会搜索发送的内容并确定发送的名称是否与实现 IPostBackEventHandler 的服务器控件的 UniqueID 对应。如果对应,页框架就会在该控件上调用 RaisePostBackEvent 方法(在引发更改事件后)。
以下代码片段显示了在服务器上引发 Click
事件的 RaisePostBackEvent 实现。
[C#] public void RaisePostBackEvent(String eventArgument){ OnClick(EventArgs.Empty); } [Visual Basic] Public Overridable Sub RaisePostDataChangedEvent() Implements IPostBackDataHandler.RaisePostDataChangedEvent OnTextChanged(EventArgs.Empty) End Sub
注意 呈现逻辑必须为控件的名称特性分配 UniqueID,如下面的示例所示。如果客户端的控件名称特性与其 UniqueID 不匹配,则页框架无法将回发事件传送给该控件。
[C#] protected override void Render(HtmlTextWriter output) { output.Write("<INPUT TYPE=submit name=" + this.UniqueID + " Value='Click Me' />"); } [Visual Basic] Protected Overrides Sub Render(output As HtmlTextWriter) output.Write("<INPUT type=submit name=" & Me.UniqueID & _ " Value='Click Me' />") End Sub
以下示例创建了一个自定义按钮 MyButton
,该按钮引起回发、捕获回发事件并在服务器上引发 Click
事件。若要生成该示例,请参见 MSDN 中的服务器控件示例中的说明。
[C#]
using System;
using System.Web.UI;
namespace CustomControls
{
public class MyButton: Control, IPostBackEventHandler
{
// Defines the Click event.
public event EventHandler Click;
// Invokes delegates registered with the Click event.
protected virtual void OnClick(EventArgs e)
{
if (Click != null)
{
Click(this, e);
}
}
// Method of IPostBackEventHandler that raises change events.
public void RaisePostBackEvent(string eventArgument)
{
OnClick(EventArgs.Empty);
}
protected override void Render(HtmlTextWriter output)
{
output.Write("<INPUT TYPE=submit name=" + this.UniqueID +
" Value='Click Me' />");
}
}
}