事件处理以前是属于windows应用程序开发的.
现在web开发也具有了. 现在就来看看asp.net它是怎么做到的.
asp.net中的程序:
往窗体中拉入一个Button控件
双击一下它,为其添加单击事件响应
//this.Button1.Click += new EventHandler(Button1_Click)
//由于用的是vs2005,所以我补上了上面一句,单击了Button1,触发了Clik事件
//委托给Button1_Click这个函数来处理.EventHandler是.net中提供的默认委托.
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("<script language='javascript'>alert('您单击了Button1');</script>");
}
在服务端执行.
这种机制在以前asp中是不可想象的.
接着让我们看看asp中的处理
asp中的程序:
<script language="javascript">
function Button1_Click()
{
alert("您单击了Button1");
}
</script>
<input type="button" name="Button1" onClick="Button1_Click" />
一切只能在客户端浏览器中进行.好失望噢!!!
asp.net中Button为什么会具有这种回发的功能呢?
在 SDK 中查找 Web Button控件可以看到
System.Object
System.Web.UI.Control
System.Web.UI.WebControls.WebControl
System.Web.UI.WebControls.Button
public class Button : WebControl, IPostBackEventHandler
IPostBackEventHandler从名称可以猜出7,8分了吧.
对它就是让Button控件具有了回发功能.
该接口中含有void RaisePostBackEvent (string eventArgument);
这个函数用来处理回发事件,即回发就会触发它.
eventArgument 表示要传递到事件处理程序的可选事件参数的 String。
现在让我们自己来实现一个具有此种功能的控件吧.
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
分析下这个控件:Render 绘制出了一个 html按钮
<input type="submit" name="PostBackComponent1" value="回发" />
点击这个html按钮 submit即提交表单发送到服务器.只要会动态编程的人应该都知道.
接下来有点特别:就是一般人我不告诉他.
发送到服务器,也可称之为回发,即回发到服务器嘛.
只要程序实现了IPostBackEventHandler接口实现了RaisePostBackEvent函数.
系统便会调用RaisePostBackEvent中的内容.
即OnClick(this,EventArgs.Empty);
接着只要Click事件不为空,就触发该事件.
触发后,当然就交给了该事件的委托函数去处理了啦.
噢对了,我们还没有委托呢?那接下来就来委托喽.
新建一个网页,拉入该控件.
protected void Page_Load(object sender, EventArgs e)
{
//对该控件的Click事件进行委托给PostBackComponent1_Click函数处理
PostBackComponent1.Click += new EventHandler(PostBackComponent1_Click);
}
protected void PostBackComponent1_Click(object sender, EventArgs e)
{
Response.Write("<script language='javascript'>alert('您单击了PostBackComponent1这个按钮');</script>");
}
编译:运行.点击按钮:弹出:您单击了PostBackComponent1这个按钮.
程序按预期执行.
接下来,要干什么呢?当然是看一看没有回发时,和有回发时有什么区别了呀.
有什么区别呢?先预测一下.
有回发触发RaisePostBackEvent,没回发也就是没有触发该事件,也就是没有触发OnClick也就是没有触发Click
也就是 当你单击了按钮后没有弹出:您单击了PostBackComponet1这个按钮
那就实施一下吧.
注释掉 IPostBackEventHandler
public class PostBackComponent : Control//, IPostBackEventHandler
结果按预期执行.