WebRequestExecutor是 ASP.NET AJAX网络访问基础结构的***修改点。理论上,我们可以使用自定义的WebRequestExecutor来取代默认的 XMLHttpExecutor。我们要做的,其实只是开发一个继承于Sys.Net.WebRequestExecutor类。不过事实上,在实际使用中,Sys.Net.XMLHttpExecutor已经足够用了,真的要自定义,也只需继承这个类即可。就像接下去的例子一样。
可是,Sys.Net.XMLHttpExecutor作为一个父类来说,可以说相当的不友好。先不多说,我们开始吧。在这个例子中,我们将开发一个 TraceExecutor,如果使用了这个Executor,Request和Response的信息都会被打印在页面上,开发人员可以把这些内容作为一个参考。TraceExecutor非常简单,代码也很短。
一般情况下,在这个方法中,会初始化所有的“私有”变量。不过在这里,我们不需要。
然后,我们将覆盖XMLHttpExecutor的executeRequest方法,我们需要作的,就是将WebRequest对象打印在页面上。代码如下:
- function Jeffz$Net$TraceExecutor$executeRequest()
- {
- debug.trace("<b>Request sent at " + new Date() + ":</b>");
- debug.dump(this.get_webRequest(), "Request");
- Jeffz.Net.TraceExecutor.callBaseMethod(this, "executeRequest");
- }
我在这里使用Debug模式下,为方法起了一个“别名”,在prototype中需要使用一下。自然,我们也需要调用registerClass,表示类的继承关系。代码如下:
- Jeffz.Net.TraceExecutor.prototype =
- {
- executeRequest : Jeffz$Net$TraceExecutor$executeRequest
- }
- Jeffz.Net.TraceExecutor.registerClass('Jeffz.Net.TraceExecutor',
Sys.Net.XMLHttpExecutor);
我们可以尝试着使用一下,代码很简单,将HTML和Javascript一并贴出了。代码如下:
- <asp:ScriptManager runat="server" ID="ScriptManager1">
- <Scripts>
- <asp:ScriptReference Path="Debug.js" />
- <asp:ScriptReference Path="TraceExecutor.js" />
- </Scripts>
- </asp:ScriptManager>
- <asp:UpdatePanel runat="server" ID="UpdatePanel1">
- <Triggers>
- <asp:AsyncPostBackTrigger ControlID="btnRefresh" />
- </Triggers>
- <ContentTemplate>
- <%= DateTime.Now.ToString("r") %>
- </ContentTemplate>
- </asp:UpdatePanel>
- <asp:Button runat="server" ID="btnRefresh" Text="Refresh"/>
- <script language="javascript">
- Sys.Net.WebRequestManager.set_defaultExecutorType("Jeffz.Net.TraceExecutor");
- </script>
以上介绍ASP.NET中的WebRequestExecutor
【编辑推荐】