频道直达 - 学院 - 下载 - 交易 - 特效 - 字库 - 手册 -排名-工具- 繁體
网页教学网站开发 设为首页
加入收藏
联系我们
建站搜索: 常用广告代码   用户注册 | 用户登陆
您当前的位置:中国建站之家 -> 网站开发设计技术教程 -> Asp.Net教程 -> ASP.NET组件设计Step by Step(6)

ASP.NET组件设计Step by Step(6)

作者:未知  来源:转载  发布时间:2005-7-20 10:19:28  发布人:acx

减小字体 增大字体

asp.net页面如果是通过post请求到服务器,框架将会遵行事件周期生成、调用控件,而控件(如果支持回传)则将加载回传数据,并且映射成控件的服务器端事件,就好像在重放客户的客户行为(客户按下一个按钮,却引发服务器端控件的click事件)。其中的机制如何?

如果一个控件需要处理回传事件,那么必须实现一个特定接口 IPostBackEventHandler接口:

public interface IPostBackEventHandler{

void RaisePostBackEvent(string eventArgument);

}

以及另外一个接口:

IPostBackDataHandler

{

bool LoadPostData( string postDataKey, NameValueCollection postCollection);

void RaisePostDataChangedEvent();

}

一旦控件实现了这些接口,页面框架就会自动在PostBack数据完成后,调用控件的此接口IPostBackDataHandler。LoadPostData,从而让控件读取post上来的数据。PostDataKey为PostBack数据中的命名键名,通过NameValueCollection[postDataKey]可以获得页面框架传递给控件的值。控件应当读取此值,进行自己内部状态更新,反映状态变化。如果控件返回真,表示服务器控件状态改变,此时页面框架会立即调用此控件的RaisePostDataChangedEvent方法。此时,控件应当自己定义该引发那些服务器控件对外提供的事件。这些事件往往是控件编程者精心设计留给使用这控键的aspx编程者的代码舞台。

至于另一个接口IPostBackEventHandler,也是回传时候服务器调用的接口。我们知道每一个控件都有一个UniqueID,当客户端触发一个可以引起回传的客户端事件(譬如按下了submit按钮),那么自然HTTP Post数据到服务器端,服务器页面框架进行到PostBack处理时候,会检索控件是否支持IpostBackEventHandler接口,并且查找控件的UniqueID发现支持就立即调用此接口的RaisePostBackEvent方法,表示UniqueID的控件发生了一个需要捕获的事件。很明显,并非客户端所有事件都可以投射到服务器端,只能够是能够引发Post Back(也就是能够提交表单数据到服务器的事件)的事件和控件。注意,这里严格要求了UniqueID必须在服务器端和客户端对应一致,否则无法映射事件。

值得控件编写者注意的是,如果要实现接口,需要如下实现接口,而不是通常的仅仅接口方法名同名即可:

void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)

{

……

}

也就是说,接口针对页面框架实现的,也由页面框架调用。

另一方面,在客户端,能够引起回传的实际上仅有2个HTML元素<inoput type=submit >和<input type=image,但是通过客户端脚本,其他客户端事件也可导致回传数据到服务器端。Page类提供了一系列的方法来帮助实现其他可引发回传的途径:



public string GetPostBackClientEvent(

Control control,

string argument

);

获取对客户端脚本函数的引用,该函数在被调用时将导致服务器回发到窗体。



public string GetPostBackClientHyperlink(

Control control,

string argument

);将 javascript: 追加到从 GetPostBackEventReference 调用的返回的开头,从而使服务器上可以进行超级链接回发处理。



public string GetPostBackEventReference(Control);

public string GetPostBackEventReference(Control, string);

获取对客户端脚本函数的引用,调用该函数将使服务器



如果一个控件确定通过以上方法确保客户端引发回传事件,那么控件引用页将导致最终输出到客户端的HTML中包含脚本,并且脚本中藏有如下隐含变量:

<input type=”hidden” name=”__EVENTTARGET” value=””>

<input type=”hidden” name=”__EVENTARGUMENT” value=””>

<script language=”javascript”>

<!—

function __doPostBack(eventTarget,eventArgument)

{

var theform=document._ct10;

theform.__EVENTTARGET.value= eventTarget;

theform.__EVENTARGUMENT.value= eventArgument;

}

-- >

</script>

任何客户端脚本只要合法调用了__doPostBack方法即可实现回传到服务器端,并且服务器端也知道了是引发了那一个UniqueID得控件的事件。



作者Blog:http://blog.csdn.net/shanhe/

将本文收藏到QQ书签与更多好友分享
[打 印]
[] [返回上一页] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 要10G免费网络硬盘的请进..
· 通过google 赶快来赚美金..
· 注册码大全十
· 头像-qq头像(qq新头像)4..
· 让你轻松架设FTP服务器1..
· 注册码大全三
· 梦幻背景图片7
· 卡通动物图片6
· 网页制作素材-按钮素材2..
· 让你轻松架设FTP服务器5..
· 风景图片8
· 注册码大全九
· 让你轻松架设FTP服务器2..
关注此文读者还看过
· Flash MX 视频导入功能详..
· 使用 Photoshop 制作牛仔..
· 导入大量MYSQL数据的方法..
· Google今日推中文名称 购..
· 聊天室php&mysql(二..
· Alexa作弊的相关问答
· ASP 3.0高级编程(一)
· PS精通:羽毛的制作的最新..
· 比较ASP和ASP.NET中的Re..
· ASP+ACCESS实现的无限级..
· eBay封杀虚拟财产交易 “..
· 如何定时运行ASP文件(转..
· 在Windows Vista系统中加..
· 专业数码摄影师的利器!..
· 影响SEO排名的重要因素
· Photoshop调整照片色调高..
相关文章
· ASP.NET连接Access和SQL Se..
· Asp.net中防止用户多次登录..
· ASP.NET 与 Ajax 的实现方式..
· ASP.net平台社区软件Discuz..
· ASP.NET AJAX中的异步..
· 解析:如何在 ASP.NET 中下..
· ASP.Net中保护自定义的服务..
· ASP.NET中的doPostBack脚本..
· 不使用VS进行ASP.NET Membe..
· 关于ASP.NET编程中的嵌套If..
· ASP.NET 2.0 页面状态持续程..
· ASP.NET中的日期与时间的处..
· Asp.net编程中的数组基础实..
· 简单介绍 ASP.NET 中的运算..
· Asp.Net 构架(Http请..
· Asp.net中的Popup控件..
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
粤ICP备05092265号