📅  最后修改于: 2020-11-21 05:50:20             🧑  作者: Mango
AJAX代表异步JavaScript和XML。这是一种跨平台技术,可加快响应时间。 AJAX服务器控件将脚本添加到由浏览器执行和处理的页面。
但是,像其他ASP.NET服务器控件一样,这些AJAX服务器控件也可以具有与它们关联的方法和事件处理程序,这些方法和事件处理程序在服务器端进行处理。
Visual Studio IDE中的控件工具箱包含一组称为“ AJAX扩展”的控件
ScriptManager控件是最重要的控件,必须存在于页面上,其他控件才能正常工作。
它具有基本语法:
如果您创建“启用Ajax的站点”或从“添加项目”对话框中添加“ AJAX Web表单”,则该Web表单会自动包含脚本管理器控件。 ScriptManager控件负责所有服务器端控件的客户端脚本。
UpdatePanel控件是一个容器控件,它是从Control类派生的。它充当其中子控件的容器,并且没有自己的接口。当内部控件触发回发时,UpdatePanel进行干预以异步启动该发帖并仅更新页面的该部分。
例如,如果按钮控件位于更新面板内部,并且单击了它,则仅会影响更新面板中的控件,而不会影响页面其他部分上的控件。这称为部分回发或异步回发。
在您的应用程序中添加一个AJAX Web表单。默认情况下,它包含脚本管理器控件。插入一个更新面板。在更新面板控件中放置一个按钮控件和一个标签控件。将另一组按钮和标签放在面板外部。
设计视图如下所示:
源文件如下:
两个按钮控件的事件处理程序都有相同的代码:
string time = DateTime.Now.ToLongTimeString();
lblpartial.Text = "Showing time from panel" + time;
lbltotal.Text = "Showing time from outside" + time;
观察到在执行页面时,如果单击了全部回发按钮,则会更新两个标签中的时间,但是如果单击了部分回发按钮,则只会更新更新面板中的标签。
一个页面可以包含多个更新面板,每个面板包含其他控件(例如网格)并显示数据的不同部分。
当发生全部回发时,默认情况下将更新更新面板的内容。可以通过更改控件的UpdateMode属性来更改此默认模式。让我们看一下更新面板的其他属性。
下表显示了更新面板控件的属性:
Properties | Description |
---|---|
ChildrenAsTriggers | This property indicates whether the post backs are coming from the child controls, which cause the update panel to refresh. |
ContentTemplate | It is the content template and defines what appears in the update panel when it is rendered. |
ContentTemplateContainer | Retrieves the dynamically created template container object and used for adding child controls programmatically. |
IsInPartialRendering | Indicates whether the panel is being updated as part of the partial post back. |
RenderMode | Shows the render modes. The available modes are Block and Inline. |
UpdateMode | Gets or sets the rendering mode by determining some conditions. |
Triggers | Defines the collection trigger objects each corresponding to an event causing the panel to refresh automatically. |
下表显示了更新面板控件的方法:
Methods | Description |
---|---|
CreateContentTemplateContainer | Creates a Control object that acts as a container for child controls that define the UpdatePanel control’s content. |
CreateControlCollection | Returns the collection of all controls that are contained in the UpdatePanel control. |
Initialize | Initializes the UpdatePanel control trigger collection if partial-page rendering is enabled. |
Update | Causes an update of the content of an UpdatePanel control. |
更新面板的行为取决于UpdateMode属性和ChildrenAsTriggers属性的值。
UpdateMode | ChildrenAsTriggers | Effect |
---|---|---|
Always | False | Illegal parameters. |
Always | True | UpdatePanel refreshes if whole page refreshes or a child control on it posts back. |
Conditional | False | UpdatePanel refreshes if whole page refreshes or a triggering control outside it initiates a refresh. |
Conditional | True | UpdatePanel refreshes if whole page refreshes or a child control on it posts back or a triggering control outside it initiates a refresh. |
当更新一个或多个更新面板控件时,UpdateProgress控件在浏览器上提供某种反馈。例如,当用户登录或在执行一些面向数据库的作业时等待服务器响应时。
它提供视觉确认,如“正在加载页面…”,表明工作正在进行中。
UpdateProgress控件的语法为:
Loading...
上面的代码片段显示了ProgressTemplate标记内的一条简单消息。但是,它可以是图像或其他相关控件。除非使用AssociatedUpdatePanelID属性将其分配给单个更新面板,否则将为每个异步回发显示UpdateProgress控件。
下表显示了更新进度控件的属性:
Properties | Description |
---|---|
AssociatedUpdatePanelID | Gets and sets the ID of the update panel with which this control is associated. |
Attributes | Gets or sets the cascading style sheet (CSS) attributes of the UpdateProgress control. |
DisplayAfter | Gets and sets the time in milliseconds after which the progress template is displayed. The default is 500. |
DynamicLayout | Indicates whether the progress template is dynamically rendered. |
ProgressTemplate | Indicates the template displayed during an asynchronous post back which takes more time than the DisplayAfter time. |
下表显示了更新进度控制的方法:
Methods | Description |
---|---|
GetScriptDescriptors | Returns a list of components, behaviors, and client controls that are required for the UpdateProgress control’s client functionality. |
GetScriptReferences | Returns a list of client script library dependencies for the UpdateProgress control. |
计时器控件用于自动启动回发。这可以通过两种方式完成:
(1)设置UpdatePanel控件的Triggers属性:
(2)将计时器控件直接放置在UpdatePanel内部以充当子控件触发器。一个计时器可以触发多个UpdatePanel。