当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  自定义控件研究(续) 4

 自定义控件研究(续) 4

点击次数:29 次 发布日期:2008-11-26 11:45:47 作者:源代码网
源代码网推荐      添加控件行为
源代码网推荐  
源代码网推荐    到目前为止,我们设计的两个控件都是简单、静态的控件。也就是说,这些控件不会完成利用普通的内置控件或简单用户控件 (.ascx) 无法完成的任何操作。构建自定义服务器控件的主要原因之一就是要提供使用现有控件集无法执行的新功能。
源代码网推荐  
源代码网推荐    事件模型
源代码网推荐  
源代码网推荐    在 Web 窗体页面中,与服务器控件关联的事件由客户端引发并由 Web 服务器处理。对于在客户机上由服务器控件引发的事件,ASP.NET 2.0 事件模型收集有关请求的信息,并使用 HTTP Post 将详细信息传递到服务器。服务器上的 Page Framework 对该公告作出解释以确定发生的事件,然后调用适当的处理程序方法。
源代码网推荐  
源代码网推荐  图 8. 典型的服务器控件事件
源代码网推荐  
源代码网推荐    ASP.NET 2.0 可处理几乎所有捕获、传输和解释事件的方法。详细信息对于开发人员来说是隐藏的,开发人员只需要关心服务器上的处理程序方法的实现。
源代码网推荐  
源代码网推荐    大多数服务器事件要求一个到服务器的往返以便进行处理,因此支持有限数量的单击类型事件。出于性能原因,不支持鼠标悬停和其他内部事件。
源代码网推荐  
源代码网推荐    回发事件
源代码网推荐  
源代码网推荐    ASP.NET 2.0 中的很多服务器控件都生成回发事件。回发事件将页面传递到服务器以便进行处理。这是一个非常昂贵的操作,因为它要求页面通过网络进行传递。
源代码网推荐  
源代码网推荐    回发模型自从 ASP.NET 1.x 就没有进行过显著更改。为了创建一个可处理回发的控件,您的控件必须实现 IPostBackDataHandler 接口,它定义了两个方法:
源代码网推荐  
源代码网推荐    1) LoadPostData — 该方法处理您控件的回发数据。
源代码网推荐  
源代码网推荐    2) RaisePostDataChangedEvent — 该事件通知应用程序由于处理回发数据,该控件的状态已经更改。
源代码网推荐  
源代码网推荐    PostDataChangedEvent 调用引发的事件必须在该控件内部定义。然后,用户可以在开发过程中编写实际的事件方法。
源代码网推荐  
源代码网推荐    非回发事件
源代码网推荐  
源代码网推荐    某些服务器控件支持非回发事件。此类事件会更改控件的状态,但并不要求立即进行处理。这些事件由控件缓存,而不是立即传递到服务器以进行处理。例如,ListBox 控件可能包含很多元素。如果用户选择一个不同的元素,那么控件将在不通知服务器的情况下显示适当的更改并记住其新状态。在张贴包含 ListBox 的窗体之后,ListBox 控件将提交事件(选定的项)。
源代码网推荐  
源代码网推荐    非回发事件的默认行为可以通过设置 AutoPostBack 属性进行更改。如果 AutoPostBack 设置为 true,那么通常由客户端缓存的事件发送信号通知服务器立即进行处理。启用 AutoPostBack 的控件要求客户机允许运行脚本。
源代码网推荐  
源代码网推荐    ASP.NET 2.0 并未以任何明显的方式更改该模型。
源代码网推荐  
源代码网推荐    回调和带外请求
源代码网推荐  
源代码网推荐    标准的 Web 协议设计用于同步通讯。每个请求接收响应的速度与服务器生成数据的速度同样快。但是,很多任务都需要带外 请求,例如同一时间访问第三方资源。这些请求未处于浏览器和 Web 服务器之间的标准通讯带区内,因此被认为是带外请求。
源代码网推荐  
源代码网推荐    ASP.NET 1.x 中的带外
源代码网推荐  
源代码网推荐    进行带外数据请求的要求提示众多开发人员可以创造性地使用可用资源来获得所需的功能。例如,通过使用 ActiveX 组件和 JavaScript,开发人员能够进行外部 HTTP 调用而无需完全回发到服务器。下面的 JavaScript 示例说明了可以与 ASP.NET 1.x 一起使用的带外 HTTP 请求。
源代码网推荐  
源代码网推荐  function RetrieveGoogleFrontPage() {
源代码网推荐   var XmlHttp = new ActiveXObject("Msxml2.XMLHTTP.4.0");
源代码网推荐   XmlHttp.Open("GET", "http://www.fakedomain.com", false);
源代码网推荐   XmlHttp.Send();
源代码网推荐   return XmlHttp.responseText;
源代码网推荐  }
源代码网推荐  
源代码网推荐    这种机制的一个缺点就是 XmlHttp.responseText 包含该请求的完整结果。开发人员将必须编写只返回商业数据的特殊页面,否则响应会由于不必要的标记而非常庞大。
源代码网推荐  
源代码网推荐    ASP.NET 2.0 中的带外
源代码网推荐  
源代码网推荐    ASP.NET 2.0 概括了 XmlHttp 对象的使用并提供了内置的回调功能。新系统的核心有两个关键项:System.Web.UI.ICallbackEventHandler 和 Page.GetCallbackEventReference 方法。
源代码网推荐  
源代码网推荐    Page.GetCallbackEventReference 方法及其重载用于指定将参与回调事件的 JavaScript 方法。
源代码网推荐  
源代码网推荐  public string GetCallbackEventReference(
源代码网推荐   Control control,
源代码网推荐   string argument,
源代码网推荐   string clientCallback,
源代码网推荐   string context
源代码网推荐  );
源代码网推荐  
源代码网推荐    上述代码显示了 GetCallBackEventReference 所需的最小参数集,这些参数将在下面进行详细说明。
源代码网推荐  
源代码网推荐    Control — control 参数确定实现 RaiseCallbackEvent 方法的 ICallbackEventHandler。
源代码网推荐  
源代码网推荐    Argument — argument 字符串包含客户端脚本。评估该脚本的结果将作为 eventArgument 参数传递到 RaiseCallbackEvent。
源代码网推荐  
源代码网推荐    ClientCallback — clientCallback 参数包含客户端事件处理程序的名称,该处理程序将接收成功服务器事件的结果。
源代码网推荐  
源代码网推荐    Context — context 参数包含一个客户端脚本。评估该脚本的结果将传递到客户端事件处理程序,该处理程序在 clientCallback 参数中指定为 context 参数。
源代码网推荐  
源代码网推荐    CallbackEventHandler 和 GetCallbackEventReference 方法相结合在客户端和服务器之间产生异步通讯。
源代码网推荐  
源代码网推荐  
源代码网推荐   回调示例
源代码网推荐  
源代码网推荐    以下 Web 页使用回调机制查询服务器以获得其当前时间。该页面弹出一个 JavaScript 警告,在无需完整页面回发的情况下显示当前时间。
源代码网推荐  
源代码网推荐  <%@ Page Language="C#" CompileWith="Default3.aspx.cs" ClassName="Default3_aspx" %>
源代码网推荐  <%@ Register TagPrefix="cc1" Namespace="MyControls" Assembly="WebControlLibrary3" %>
源代码网推荐  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
源代码网推荐  
源代码网推荐  <html xmlns="http://www.w3.org/1999/xhtml" >
源代码网推荐  <head runat="server">
源代码网推荐  <script language="javascript">
源代码网推荐   function GetServerTime() {
源代码网推荐    var message = "";
源代码网推荐    var context = "";
源代码网推荐    <%=CallBack%>
源代码网推荐   }
源代码网推荐   function ShowServerTime(timeMessage, context) {
源代码网推荐    alert("The time on the server is: " + timeMessage);
源代码网推荐   }
源代码网推荐   function OnError(message, context) {
源代码网推荐    alert("An unhandled exception has occurred: " + message);
源代码网推荐   }
源代码网推荐  </script>
源代码网推荐  </head>
源代码网推荐  <body>
源代码网推荐  <form id="form1" runat="server">
源代码网推荐   <div>
源代码网推荐    <cc1:timesnap id="TimeSnap1" runat="server"> </cc1:timesnap>
源代码网推荐    <input type="button" value="GetTime" onclick="GetServerTime();" /> 
源代码网推荐   </div>
源代码网推荐  </form>
源代码网推荐  </body>
源代码网推荐  </html>
源代码网推荐  
源代码网推荐    上述页面源代码包含三个关键 JavaScript 函数:GetServerTime()、ShowServerTime() 和 OnError()。这些 JavaScript 函数与页面的 GetCallbackEventReference 带外请求相关联。
源代码网推荐  
源代码网推荐  public partial class Default3_aspx {
源代码网推荐   public string CallBack;
源代码网推荐   void Page_Load(object sender, EventArgs e) {
源代码网推荐    CallBack = this.GetCallbackEventReference(TimeSnap1,"message","ShowServerTime","context","OnError");
源代码网推荐   }
源代码网推荐  }
源代码网推荐  
源代码网推荐    GetCallbackEventReference 方法需要为其第一个参数实现 ICallbackEventHandler 接口的对象。通过实现 RaiseCallbackEvent() 方法,TimeSnap 自定义服务器控件符合接口要求。
源代码网推荐  
源代码网推荐  public class TimeSnap : WebControl, ICallbackEventHandler
源代码网推荐  {
源代码网推荐   ...
源代码网推荐   public string RaiseCallbackEvent(string eventArgument) {
源代码网推荐    // Uncomment next line to test error handler
源代码网推荐    // throw new ApplicationException(// "Some unhandled exception");
源代码网推荐    return DateTime.Now.ToLocalTime().ToShortTimeString();
源代码网推荐   }
源代码网推荐  }
源代码网推荐  }
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1487084
源代码网推荐  
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华