知识大全 ASP.NET组件设计之传输机制浅析
Posted 事件
篇首语:将相本无种,男儿当自强。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET组件设计之传输机制浅析相关的知识,希望对你有一定的参考价值。
ASP.NET组件设计之传输机制浅析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP NET组件设计之传输机制的讨论
ASP NET页面如果是通过post请求到服务器 框架将会遵行事件周期生成 调用控件 而控件(如果支持回传)则将加载回传数据 并且映射成控件的服务器端事件 就好像在重放客户的客户行为(客户按下一个按钮 却引发服务器端控件的click事件) 其中的机制如何?
ASP NET组件设计之传输机制的问题 如果一个控件需要处理回传事件 那么必须实现一个特定接口 IPostBackEventHandler接口:
public interface IPostBackEventHandler
void RaisePostBackEvent(string eventArgument);
ASP NET组件设计之传输机制的另外一个接口
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)
……
ASP NET组件设计之传输机制的实现接口方面也就是说 接口针对页面框架实现的 也由页面框架调用
另一方面 在客户端 能够引起回传的实际上仅有 个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 _ct ;
theform __EVENTTARGET value= eventTarget;
theform __EVENTARGUMENT value= eventArgument;
﹥
﹤/script﹥
任何客户端脚本只要合法调用了__doPostBack方法即可实现回传到服务器端
并且服务器端也知道了是引发了那一个UniqueID得控件的事件
cha138/Article/program/net/201311/13463相关参考
ASP.NETLinkButton组件编程浅析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! A
Asp.net组件设计浅论 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一什么是组件? 查看
知识大全 C#+ASP.NET 2.0 定制复合组件之高级篇
C#+ASP.NET2.0定制复合组件之高级篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一
知识大全 C#+ASP.NET 2.0 定制复合组件之基础篇
C#+ASP.NET2.0定制复合组件之基础篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘
ASP.NET控件开发基础之复合控件事件处理浅析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NET创建Web服务之设计方针 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 使用ASP
ASP.NET设计网络硬盘之两个重要类 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 要进行网络
ASP.NET设计网络硬盘之查看文件夹 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 就像操作本
ASP.NET页面的CheckBoxList组件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NETAJAX客户端组件初探 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以组件的思想