谈一下你对asp.net中事件回传机制的理解

匿名网友 匿名网友 发布于: 2015-08-30 00:00:00
阅读 156 收藏 0 点赞 0 评论 0

ASP.NET可以保存页面各个控件的状态数据,通过控件的操作使页面表单提交到本页时,虽然经过了浏览器和服务器的往返,状态数据仍然可以保持。根据这些状态的变化,服务器端可以决定是否触发指定控件的事件,并执行相应的事件处理方法。
【分析】
这个面试题主要考查面试者对ASP.NET中事件回传机制的认识。类似于桌面软件开发的程序,在页面中插入一个服务器控件(如Button),双击该控件即可编写其默认事件处理方法的代码。当浏览用户在浏览器端操作这个服务器控件所生成的HTML控件(如单击表单按钮控件)时,将触发开发时所编写的默认事件(如单击为“Click”事件),并执行所编写的事件处理方法。在WinForm程序中,这种开发方式再正常不过,不过在WEB开发领域,ASP.NET通过事件回传机制完成这组操作。因为HTTP协议是无状态的协议,当服务器把页面发送给浏览器端后,程序即执行完毕,不保留任何信息。
回传即PostBack,关键在于ASP.NET的回传机制可在浏览器端的页面中保存各个控件的状态数据,即使页面提交到服务器并返回本页时,这些数据仍然存在。在VS 2008中添加新的WEB窗体项到NetWeb项目,并命名为PostBack.aspx。编写PostBack.aspx如代码11.10所示。

代码11.10 服务器控件事件回传:PostBack.aspx

%@ Page Language=”C#” AutoEventWireup=”true” CodeBehind=”PostBack.aspx.cs” Inherits=”NetWeb.PostBack” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml” >
<head runat=”server”>
<title>回传机制</title>
</head>
<body>
<form id=”form1″ runat=”server”>
<div>
<asp:Button runat=”server” ID=”btn1″ onclick=”btn1_Click” Text=”Button控件1″ />
<asp:Button runat=”server” ID=”btn2″ onclick=”btn2_Click” Text=”Button控件2″ />
<asp:LinkButton runat=”server” ID=”linkbtn” Text=”LinkButton控件”
onclick=”linkbtn_Click”></asp:LinkButton>
<hr />
<asp:Label runat=”server” ID=”lb”></asp:Label>

</div>
</form>
</body>
</html>
以上页面代码中添加了3个常用的服务器控件,并且其设置了对应的Click事件处理方法,这些方法定义于PostBack.aspx.cs文件中。编写PostBack.aspx.cs如代码11.11所示。

代码11.11 服务器控件事件回传逻辑代码:PostBack.aspx.cs

using System;
…………………………………

namespace NetWeb
{
public partial class PostBack : System.Web.UI.Page
{
//btn1控件的事件处理方法,直接读取其Text属性
//在回传页面到浏览器端时将这个属性值赋值给lb控件的Text属性
protected void btn1_Click(object sender, EventArgs e)
{
this.lb.Text = “您单击了” + this.btn1.Text;
}

//btn2控件的事件处理方法,获取引起事件的sender对象,并将类型转换为Button
//在回传页面到浏览器端时将bt的“Text”属性值赋值给lb控件的Text属性
protected void btn2_Click(object sender, EventArgs e)
{
Button bt = (Button)sender;
this.lb.Text = “您单击了” + bt.Text;
}

//linkbtn控件的事件处理方法,获取引起事件的sender对象,并将类型转换为LinkButton
//在回传页面到浏览器端时将lbt的“Text”属性值赋值给lb控件的Text属性
protected void linkbtn_Click(object sender, EventArgs e)
{
LinkButton lbt = (LinkButton)sender;
this.lb.Text = “您单击了” + lbt.Text;
}
}
}
逻辑代码中的事件处理方法,用了两种方式获取触发事件的对象,其作用是一样的。当浏览用户访问PostBack.aspx页面时,单击三个控件中的一个,将提交页面的表单,回传页面时将使用lb(Label控件)控件显示被单击控件的“Text”属性值。初次接触ASP.NET的编程者会对数据的保持感到疑惑,例如,页面回传时,服务器怎么知道是哪个控件引起页面回传的。每个控件的“id”属性等属性被保存到ViewState中,提交表单到服务器后即可判断是哪个控件引发的页面回传,即可在服务器端引发对应控件的事件,进而执行事件处理方法。同时ViewState还可以保持控件的“Text”属性值(如果有),所以以上例子的事件处理方法中将“Text”属性值进行赋值操作。

评论列表
文章目录