ASP.NET组件设计之传输机制浅析
创始人
2024-04-27 06:31:39
0次

ASP.NET组件设计之传输机制的讨论:

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

ASP.NET组件设计之传输机制的问题:如果一个控件需要处理回传事件,那么必须实现一个特定接口 IPostBackEventHandler接口:

  1. public interface IPostBackEventHandler{  
  2.  
  3.     void RaisePostBackEvent(string eventArgument);  
  4.  
  5. } 

ASP.NET组件设计之传输机制的另外一个接口:

  1. IPostBackDataHandler   
  2.  
  3. {  
  4.  
  5. bool LoadPostData( string postDataKey,   NameValueCollection postCollection);  
  6.  
  7. void RaisePostDataChangedEvent();  
  8.  
  9. } 

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

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

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

  1. void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)  
  2.  
  3. {  
  4.  
  5.        ……  
  6.  
  7. } 

ASP.NET组件设计之传输机制的实现接口方面也就是说,接口针对页面框架实现的,也由页面框架调用。

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

  1. public string GetPostBackClientEvent(  
  2.  
  3.    Control control,  
  4.  
  5.    string argument  
  6.  
  7. ); 

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

  1. public string GetPostBackClientHyperlink(  
  2.  
  3.    Control control,  
  4.  
  5.    string argument  
  6.  
  7. ); 

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

  1. public string GetPostBackEventReference(Control);  
  2.  
  3. public string GetPostBackEventReference(Control, string); 

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

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

  1. ﹤input type=”hidden” name=”__EVENTTARGET” value=””﹥  
  2.  
  3. ﹤input type=”hidden” name=”__EVENTARGUMENT” value=””﹥  
  4.  
  5. ﹤script language=”javascript”﹥  
  6.  
  7. ﹤!—  
  8.  
  9. function __doPostBack(eventTarget,eventArgument)  
  10.  
  11.         {  
  12.  
  13.         var theform=document._ct10;  
  14.  
  15.         theform.__EVENTTARGET.value= eventTarget;  
  16.  
  17.         theform.__EVENTARGUMENT.value= eventArgument;  
  18.  
  19.         }  
  20.  
  21. -- ﹥  
  22.  
  23. ﹤/script﹥ 

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

ASP.NET组件设计之传输机制方面的内容就简单的向你介绍到这里,希望对你学习ASP.NET组件设计之传输机制有所帮助。

【编辑推荐】

  1. ASP.NET组件设计学习之创建工程库
  2. ASP.NET组件设计学习之ASP.NET服务器控件
  3. ASP.NET自定义控件入门浅析
  4. ASP.NET服务器控件视图浅析
  5. ASP.NET组件设计之生命周期详解

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...