ASP.NET控件开发基础(8)2011-01-08Clingingboy上一篇写了复合控件基本的概念,这次就继续上次的话题,来学习复合控件如何触发事件有一些复合控件直接把按钮触发事件所需的事情封装好,另外一种则是自定义事件,更具灵活性,当然这是根据需要设计的。以下会以例子来说明的.下面我们假设我们控件中有两个按钮.以下不列出所有代码,具体可在文章最后下载代码.(1) 直接实现按钮事件在控件中(以下代码并非实现复合控件)直接实现事件则无需自定义事件,如下代码(如果对数据回传有些不熟悉的话,可先看第三篇,希望对你有帮助)示例一(只列出局部代码,具体可在文章最后下载代码)void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
if (eventArgument == "Previous")
PreviousText = "你点击了PreviousText按钮";
else if (eventArgument == "Next")
NextText = "你点击了NextText按钮";
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, Page.GetPostBackEventReference(this, "Previous"));
writer.RenderBeginTag(HtmlTextWriterTag.Button);
writer.Write(this.PreviousText);
writer.RenderEndTag();
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, Page.GetPostBackEventReference(this, "Next"));
writer.RenderBeginTag(HtmlTextWriterTag.Button);
writer.Write(this.NextText);
writer.RenderEndTag();
}还记得第三篇时示例一中下面的代码吗?此控件中只触发了一个事件,所以无需根据服务器传递的参数来判断出发哪个事件//实现RaisePostBackEvent方法,处理回发事件
public void RaisePostBackEvent(string eventArgument)
{
OnClick(EventArgs.Empty);
}RaisePostBackEvent方法有一个eventArgument参数用来传递事件数据.代码实现了一个空参数传递(eventArgument参数为空)的事件OnClick(EventArgs.Empty)再比较一下示例一的代码,因为其用到了两个按钮Page.GetPostBackEventReference方法用来传递参数RaisePostBackEvent方法则以传递参数来判断触发哪个按钮小结:在控件中直接实现按钮事件,则无需定义自定义事件,但别忘了在RaisePostBackEvent方法中根据传递过来的不同参数来加以判断.