AJAX代表异步JavaScript和XML.这是一种跨平台技术,可加快响应时间. AJAX服务器控制将脚本添加到由浏览器执行和处理的页面.
然而,与其他ASP.NET服务器控件一样,这些AJAX服务器控件也可以将方法和事件处理程序关联起来与它们一起在服务器端处理.
Visual Studio IDE中的控件工具箱包含一组名为'AJAX Extensions'的控件
ScriptManager控件是最重要的控件,必须出现在页面上才能使其他控件生效.
它有基本语法:
<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager>
如果您从"添加项目"对话框创建"启用Ajax的站点"或添加"AJAX Web表单",则Web表单将自动包含脚本管理器控制. ScriptManager控件负责所有服务器端控件的客户端脚本.
UpdatePanel控件是一个容器控件并派生自Control类.它充当其中的子控件的容器,并且没有自己的接口.当它内部的控件触发回发时,UpdatePanel会介入以异步启动帖子并仅更新页面的那一部分.
例如,如果按钮控件位于更新面板内单击它,只有更新面板中的控件会受到影响,页面其他部分的控件不会受到影响.这称为部分回发或异步回发.
在应用程序中添加AJAX Web表单.它默认包含脚本管理器控件.插入更新面板.在更新面板控件中放置一个按钮控件和一个标签控件.在面板外放置另一组按钮和标签.
设计视图如下所示:
源文件如下:
<form id="form1" runat="server"> <div> <asp:ScriptManager ID="ScriptManager1" runat="server" /> </div> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Button ID="btnpartial" runat="server" onclick="btnpartial_Click" Text="Partial PostBack"/> <br /> <br /> <asp:Label ID="lblpartial" runat="server"></asp:Label> </ContentTemplate> </asp:UpdatePanel> <p> </p> <p>Outside the Update Panel</p> <p> <asp:Button ID="btntotal" runat="server" onclick="btntotal_Click" Text="Total PostBack" /> </p> <asp:Label ID="lbltotal" runat="server"></asp:Label> </form>
两个按钮控件都有相同的事件处理程序代码:
string time = DateTime.Now.ToLongTimeString(); lblpartial.Text = "Showing time from panel" + time; lbltotal.Text = "Showing time from outside" + time;
观察页面执行时,如果单击总后置按钮,它会更新两个标签中的时间,但如果部分回发后按钮是单击,它只更新更新面板中的标签.
一个页面可以包含多个更新面板,每个面板包含其他控件,如网格,并显示不同的数据部分.
当发回总回发时,更新面板内容为默认情况下更新.可以通过更改控件的UpdateMode属性来更改此默认模式.让我们看一下更新面板的其他属性.
下表显示了更新面板控件的属性:
属性 | 描述 |
---|---|
ChildrenAsTriggers | 此属性指示回帖是否为来自子控件,这会导致更新面板刷新. |
ContentTemplate | 它是内容模板,用于定义渲染时更新面板中显示的内容. |
ContentTemplateContainer | 检索动态创建的模板容器对象,并用于以编程方式添加子控件. |
IsInPartialRendering | 表示面板是否作为部分回发的一部分进行更新. |
RenderMode | 显示渲染模式.可用的模式是Block和Inline. |
UpdateMode | 获取或设置通过确定一些条件来渲染模式. |
Triggers | 定义集合触发器对象每个对应于导致面板自动刷新的事件. |
下表显示了更新面板控件的方法:
方法 | 描述 |
---|---|
CreateContentTemplateContainer | 创建一个Control对象,该对象充当定义UpdatePanel控件内容的子控件的容器. |
CreateControlCollection | 返回UpdatePanel控件中包含的所有控件的集合. |
如果启用了部分页面渲染,则初始化UpdatePanel控件触发器集合. | |
更新 | 更新UpdatePanel控件的内容. |
更新面板的行为取决于UpdateMode属性和ChildrenAsTriggers属性的值.
UpdateMode | ChildrenAsTriggers | 效果 |
---|---|---|
Always | False | 非法参数. |
Always | True | 如果整个页面刷新或是孩子,UpdatePanel会刷新对它的控制回发. |
Conditional | False | 如果整个页面刷新或其外部的触发控件启动刷新,UpdatePanel将刷新. |
Conditional | True | 如果整个页面刷新或其上的子控件回发或触发控件,UpdatePanel将刷新在它之外启动刷新. |
UpdateProgress控件在更新一个或多个更新面板控件时,在浏览器上提供一种反馈.例如,当用户在执行某些面向数据库的作业时登录或等待服务器响应.
它提供了一个视觉确认,例如"正在加载页面...",表明工作在$ p $ b
UpdateProgress控件的语法是:
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DynamicLayout="true" AssociatedUpdatePanelID="UpdatePanel1" > <ProgressTemplate> Loading... </ProgressTemplate> </asp:UpdateProgress>
上面的代码片段显示了ProgressTemplate标记内的一条简单消息.但是,它可能是图像或其他相关控件. UpdateProgress控件显示每个异步回发,除非使用AssociatedUpdatePanelID属性将其分配给单个更新面板.
下表显示了更新进度控件的属性:
属性 | 描述 |
---|---|
AssociatedUpdatePanelID | 获取并设置与此控件关联的更新面板的ID. |
Attributes | 获取或设置UpdateProgress控件的级联样式表(CSS)属性. |
DisplayAfter | 获取并设置显示进度模板的时间(以毫秒为单位).默认值为500. |
DynamicLayout | 指示进度模板是否是动态的渲染. |
ProgressTemplate | 表示在异步回发期间显示的模板需要比DisplayAfter时间更长的时间. |
下表显示了更新进度控制的方法:
方法 | 描述 |
---|---|
GetScriptDescriptors | 返回UpdateProgress控件的客户端功能所需的组件,行为和客户端控件列表. |
GetScriptReferences | 返回UpdateProgress控件的客户端脚本库依赖项列表. |
定时器控件用于自动启动回传.这可以通过两种方式完成:
(1)设置UpdatePanel控件的Triggers属性:
<Triggers> <asp:AsyncPostBackTrigger ControlID="btnpanel2" EventName="Click" /> </Triggers>
(2)将一个计时器控件直接放在UpdatePanel中作为子控件触发器.单个计时器可以是多个UpdatePanel的触发器.
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always"> <ContentTemplate> <asp:Timer ID="Timer1" runat="server" Interval="1000"> </asp:Timer> <asp:Label ID="Label1" runat="server" Height="101px" style="width:304px" > </asp:Label> </ContentTemplate> </asp:UpdatePanel>