当前位置导航:炫浪网>>网络学院>>网页制作>>ASP.NET教程

ASP.NET控件开发基础之复合控件事件处理浅析

  上一篇写了ASP.NET控件开发基础之复合控件基本的概念,这次就继续上次的话题,来学习ASP.NET复合控件如何触发事件.

  对于ASP.NET控件开发基础的学习首先我们先明白些内容:

  有一些ASP.NET复合控件直接把按钮触发事件所需的事情封装好,另外一种则是自定义事件,更具灵活性,当然这是根据需要设计的。以下会以例子来说明的.下面我们假设我们控件中有两个按钮.以下不列出所有代码,具体可在文章最后下载代码.

  (1) 直接实现按钮事件

  在控件中(以下代码并非实现复合控件)直接实现事件则无需自定义事件,如下代码(如果对数据回传有些不熟悉的话,可先看第三篇,希望对你有帮助)

  ASP.NET控件开发基础示例一(只列出局部代码,具体可在文章最后下载代码)

  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方法中根据传递过来的不同参数来加以判断.

  (2)以自定义事件实现

  根据示例一上面的代码加上自定义委托和事件,如下代码(只列出局部代码,具体可在文章最后下载代码)

  ASP.NET控件开发基础示例二

  void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)

  {

  if (eventArgument == "Previous")  OnClickPrevious(EventArgs.Empty);

  else if

  (eventArgument == "Next")

  OnClickNext(EventArgs.Empty);

  }

  调用代码如下

  protected void NavButtons2_1_ClickPrevious(object sender, EventArgs e)

  {

  Label1.Text = "你点击了PreviousText按钮";

  }

  protected void NavButtons2_1_ClickNext(object sender, EventArgs e)

  {

  Label1.Text = "你点击了NextText按钮";

  }

  小结:在示例一的基础上去除直接实现好的按钮事件,然后自定义事件.

  再次提醒如果大家对回发事件,还请再参考一些文章先弄清楚,或者也可以看看我写的第三篇文章.

  好了,上面讲的都非复合控件,但复合控件实现起来却很相似,或者可以说更加简单.

  下面先来看个简单的示例(大家知道button按钮有CommandName属性和CommandArgument属性)

  ASP.NET控件开发基础示例三

  ﹤%@ Page Language="C#" %﹥ ﹤!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"﹥

  ﹤script runat="server"﹥

  protected void Button1_Click(object sender, EventArgs e)

  {

  Label1.Text = "你点击了左按钮";

  }

  protected void Button2_Click(object sender, EventArgs e)

  {

  Label1.Text = "你点击了右按钮";

  }

  protected void btn_command(object sender, CommandEventArgs e)

  {

  switch (e.CommandName)

  {

  case "left":  Label2.Text = "你点击了左按钮";

  break;  case "right":  Label2.Text = "你点击了右按钮";  break;

  }

  }

  protected void btn2_command(object sender, CommandEventArgs e)

  {

  switch (e.CommandName)

  {

  case "left":  Button1_Click(this, e);

  break;

  case "right":  Button2_Click(this, e);

  break;

  }

  }

  ﹤/script﹥

 

相关内容
赞助商链接