上次讲了在继承Control类的时候为什么需要重写Render方法
本次来介绍控件的事件处理. 我们知道Button控件有OnClick事件,DropDownList控件有SelectedIndexChanged事件.
一.回发事件和客户端回发
下面来看一个最简单的例子
按钮单击事件
1 protected void Button1_Click(object sender, EventArgs e)
2 {
3 Label1.Text = "你好: "+TextBox1.Text;
4 }
大家知道Web 服务器控件创建的按钮的类型有三种
1.Button
2.LinkButton
3.ImageButton
打开MSDN看到三个控件都继承IPostBackEventHandler接口
开发基础(3)-">
IPostBackEventHandler接口专门定义了处理回发事件的方法,说白了就是onclick事件,如果自定义控件需要处理回发事件,你就需要继承IPostBackEventHandler接口,然后实现接口的RaisePostBackEvent 方法,另外一个简单的方法就是直接继承Button控件就可以了.
RaisePostBackEvent方法用于处理窗体发送给服务器时引发的事件,方法中有一个参数eventArgument 表示要传递到事件处理程序的可选事件参数的 String
下面总结处理回发事件,必须要做的步骤
(1)继承并实现IPostBackEventHandler接口的RaisePostBackEvent方法
(2)为表单元素定义UniqueID,以与IPostBackEventHandler服务器控件的UniqueID相对应
相应实现代码如下
示例一
namespace CustomControls
{
public class SuperButton1 : Control, IPostBackEventHandler
{
// 声明Click事件委托
public event EventHandler Click;
// 定义OnClick事件处理程序
protected virtual void OnClick(EventArgs e)
{
if (Click != null)
{
Click(this, e);
}
}
// 实现RaisePostBackEvent方法,处理回发事件
public void RaisePostBackEvent(string eventArgument)
{
OnClick(EventArgs.Empty);
}
protected override void Render(HtmlTextWriter output)
{
output.Write("<INPUT TYPE=submit name=" + this.UniqueID +
" Value='确定' />");
}
}
}