相对于模式一,采用模式二时,浏览器刷新时,之前的最后一次Ajax回调能够被记忆,并在页面载入后自动重新执行。
AjaxDemo2.aspx演示了采用模式二使用AjaxHelper的功能。
注意,AjaxDemo2.aspx和AjaxDemo.aspx的唯一不同只在于aspx文件,参见下面的AjaxDemo2.aspx的代码:
和AjaxDemo.aspx页面比较,您可以发现两点细微的区别,请注意粗体的代码。<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AjaxDemo2.aspx.cs" Inherits="AjaxDemo2" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Untitled Page</title> <script language="javascript" type="text/javascript"> function customFunc(data) { alert(data); } </script> </head> <body onload="<%= Ajax.OnPageLoad() %>"> <form id="form1" runat="server"> <div> <input type="button" value="Test Callback" onclick="<%= Ajax.Callback2("AjaxTemplates/Simple", null, "customFunc") %>" /> <input type="button" value="Test Update" onclick="<%= Ajax.Update2("AjaxTemplates/DataBinding", "outputElementId", "num=5", "customFunc") %>" /> <br /> <br /> <div id="outputElementId"></div> </div> </form> </body> </html>
第一点不同是,页面的body标签多了一个onload事件处理,这个事件处理的代码的作用就是在页面loaded之后,自动重新执行上一次模式二方式执行的Ajax回调。
第二点不同是,此时使用Ajax.Callback2和代替了模式一中的AjaxUpdate2,他们的参数列表和含义完全相同。
如果运行AjaxDemo2.aspx页面,并点击按钮,您就会发现,在点击按钮的同时,页面的地址栏部分会被附加一个#...的代码,这里就包含了上一次Ajax.Callback2或Ajax.Update2执行时的所有参数。Ajax.OnPageLoad()就是根据这些参数来重新执行上一次Ajax回调的。
实际上,模式一和模式二完全可以在同一个页面混合使用,只需记住,只有Ajax.Callback2或Ajax.Update2执行的上一次(仅仅一次,在之前的Ajax回调是不记忆的)Ajax回调可以在页面刷新时被自动重复执行。