使用 UpdatePanel

使用 UpdatePanel1概述ASP.NETUpdatePanel控件能让你创建丰富的、以客户为中心的Web应用程序。使用UpdatePanel控件,可以刷新选择的页面部分而不是使用回发来刷新整个页面,这就像是执行了一个局部页面更新一样。包含一个ScriptManager和一个或多个UpdatePanel的Web页面会自动加入局部页面更新,而不需要定制客户端代码。1.1场景…

大家好,又见面了,我是你们的朋友全栈君。

1 概述

ASP.NET UpdatePanel 控件能让你创建丰富的、以客户为中心的 Web 应用程序。使用 UpdatePanel 控件,可以刷新选择的页面部分而不是使用回发来刷新整个页面,这就像是执行了一个局部页面更新一样。包含一个 ScriptManager 和一个或多个 UpdatePanel 的 Web 页面会自动加入局部页面更新,而不需要定制客户端代码。

1.1 场景

UpdatePanel 是一个服务器控件,可以帮助你开发使用复杂客户端行为的 Web 页面,使 Web 页面呈现更多的交互给用户。服务器和客户端之间协调以仅更新指定的页面部分通常需要很深的 ECMAScript(Javascript)知识。然而,通过使用UpdatePanel 控件,可以不用编写任何客户端脚本就可以给页面加入局部页面更新。如果你愿意,可以添加定制的客户端脚本以增强客户端用户体验。在使用 UpdatePanel 控件时,页面行为是独立于浏览器的,并且潜在的减少了客户端和服务器的数据传输量。

1.2 背景

UpdatePanel 的工作是指定无须刷新整个页面就可以更新的区域,这个过程由 ScriptManager 服务器控件和客户端 PageRequestManager 类进行协调。当局部更新可用时,控件可以异步的发送到服务器。异步回发的行为和常规回发一样,结果服务器页面会执行完整的页面和控件生命周期。然而,使用异步回发,页面更新仅限于封闭在 UpdatePanel 控件中标记为更新的页面区域。服务器仅为受影响的元素发送 HTML 标记到浏览器。在浏览器中,客户端 PageRequestManager 类执行文档对象模型 ( DOM ) 操作用更新的标记替换得已有的 HTML 。下面的图例展示了页面的第一次加载,和后来的刷新 UpdatePanel 控件的内容的异步回发。

使用 UpdatePanel

2 UpdatePanel 的使用

UpdatePanel 的基本使用方法非常简单,向页面中添加一个 SciprtManager 控件和一个或多个 UpdatePanel 控件,再把要局部更新的页面元素和触发更新的控件放到 UpdatePanel 控件的 ContentTemplate 属性中即可。如下列代码所示,在其中添加了一个 Button 控件:

 1
使用 UpdatePanel
<
asp:UpdatePanelID
=

UpdatePanel1



 2
使用 UpdatePanel        UpdateMode
=

Conditional



 3
使用 UpdatePanel        runat
=

server

>


 4
使用 UpdatePanel    
<
ContentTemplate
>


 5
使用 UpdatePanel        
<
asp:Button ID
=

Button1



 6
使用 UpdatePanel            Text
=

RefreshPanel



 7
使用 UpdatePanel            runat
=

server

/>


 8
使用 UpdatePanel    
</
ContentTemplate
>


 9
使用 UpdatePanel
</
asp:UpdatePanel
>


10
使用 UpdatePanel

要使用 UpdatePanel 控件可用,必须设置 ScriptManager 的 EnablePartialRendering  属性为 true 。

UpdatePanel 控件可以输出为 <div> 元素或 <span> 元素,以在页面中形成一个块或内联的区域,可以设置其 RenderMode 属性为 Block ( 默认,<div>)或 Inline ( <span> ) 来指定。

2.1 指定 UpdatePanel 的内容

可以使用 ContentTemplate 属性以声明的方式或者在设计器中添加内容到 UpdatePanel 控件中。在标记中,这个属性显示为 <ContentTemplate> 元素。如果要以编程的方式添加内容,可以使用 ContentTemplateContainer 属性。

包含一个或多个 UpdatePanel 控件的页面在第一次输出时,所有 UpdatePanel 控件中的内容都会被输出并被发送到浏览器。在后来的异步更新中,单个 UpdatePanel 控件中的内容可能会被更新。更新依赖于面板的设置、导致回发的元素以及指定给每个面板的代码。

2.2 指定 UpdatePanel 的触发器

默认情况下,UpdatePanel 控件中的任何控件回发都将导致异步回发并刷新面板的内容。然而,也可以配置页面中且不在面板中的其他控件来刷新 UpdatePanel 控件。可以为 UpdatePanel 控件定义一个触发器来完成此目的。触发器是指定哪个回发控件和事件来导致面板的更新的绑定。当触发器控件指定的事件触发时(如一个按钮的 Click 事件),更新面板将被刷新。

下列示例展示了如何添加一个触发器到 UpdatePanel 面板中去。

使用 UpdatePanel
<
asp:Button ID
=

Button1


使用 UpdatePanel         Text

=

Refresh Panel


使用 UpdatePanel          runat

=

server

 
/>

使用 UpdatePanel

<
asp:ScriptManager ID
=

ScriptManager1


使用 UpdatePanel          runat

=

server

 
/>

使用 UpdatePanel

<
asp:UpdatePanel ID
=

UpdatePanel1

   UpdateMode
=

Conditional

 runat
=

server

>

使用 UpdatePanel         

<
Triggers
>

使用 UpdatePanel                

<
asp:AsyncPostBackTrigger ControlID
=

Button1

 
/>

使用 UpdatePanel        

</
Triggers
>

使用 UpdatePanel       

<
ContentTemplate
>

使用 UpdatePanel              

<
fieldset
>

使用 UpdatePanel                  

<
legend
>
UpdatePanel 内容
</
legend
>

使用 UpdatePanel                  

<%=
DateTime.Now.ToString() 
%>

使用 UpdatePanel              

</
fieldset
>

使用 UpdatePanel       

</
ContentTemplate
>

使用 UpdatePanel

</
asp:UpdatePanel
>

使用 UpdatePanel

触发器由在 UpdatePanel 控件的 <Triggers> 元素中的 <asp:AsyncPostBackTrigger> 元素定义。(如果是在 Visual Studio 中编辑页面,就可以在 UpdatePanel 的属性面板中单击 Triggers 属性后面的省略号按钮打开一个 UpdatePanelTrigger 集合编辑器对话框来创建触发器。)触发器必要的属性是 ControlID ,用它来指定可以导致面板更新的控件的 ID 。

有上例中,虽然按钮没有声明在面板中,但是由于在面板中指定了它为触发器,所以当按钮事件触发时,会产生其被包含中面板中同样的结果,即面板被更新。

触发器控件的事件是可选的,如果没有指定事件,触发器将使用控件的默认事件。例如,对于 Button 控件,默认事件就是 Click 事件。

2.3 在母版页中使用 UpdatePanel

要在母版页中使用 UpdatePanel 控件,必须确定如何使用 ScriptManager 控件。如果在母版页面中放置了一个 ScriptManater 控件,则 ScriptManager 控件可以在所有的内容面中起作用。(如果要在内容页中声明脚本或服务,可以在页面中添加一个 ScriptManagerProxy,它具有和 ScriptManager 差不多一样的属性和方法。)

如果在母版页中没有包含 ScriptManager 控件,就必须在包含 UpdatePanel 控件的每个内容页是都要放置一个 ScriptManager 控件,设计的选择依赖于在应用程序中将如何管理客户端脚本。

如果在母版页中包含了 ScriptManager 控件,而在某个内容页中又不打算使用局部页面输出的功能时,必须用程序设置内容中的 ScriptManager 控件的 EnablePartialRendering 为 false  。

2.4 使用嵌套的 UpdatePanel 控件

UpdatePanel 控件可以嵌套使用,如果父面板被刷新,则所有嵌套的面板也都会被刷新。

下列代码展示了如何在一个 UpdatePanel 控件中定义另一个 UpdatePanel 控件。

 1
使用 UpdatePanel
<%
@ Page Language
=

C#

 
%>


 2
使用 UpdatePanel
<!
DOCTYPE html PUBLIC 

-//W3C//DTD XHTML 1.0 Transitional//EN



 3
使用 UpdatePanel 

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

>


 4
使用 UpdatePanel
<
html xmlns
=

http://www.w3.org/1999/xhtml

>


 5
使用 UpdatePanel
<
head id
=

Head1

 runat
=

server

>


 6
使用 UpdatePanel    
<
title
>
UpdatePanelUpdateMode 示例
</
title
>


 7
使用 UpdatePanel    
<
style type
=

text/css

>


 8
使用 UpdatePanel    div.NestedPanel

 9
使用 UpdatePanel使用 UpdatePanel    
使用 UpdatePanel
{


10
使用 UpdatePanel      position: relative;

11
使用 UpdatePanel      margin: 
2
%
 
5
%
 
2
%
 
5
%
;

12
使用 UpdatePanel    }


13
使用 UpdatePanel    
</
style
>


14
使用 UpdatePanel
</
head
>


15
使用 UpdatePanel
<
body
>


16
使用 UpdatePanel    
<
form id
=

form1

 runat
=

server

>


17
使用 UpdatePanel        
<
div
>


18
使用 UpdatePanel            
<
asp:ScriptManager ID
=

ScriptManager



19
使用 UpdatePanel                               runat
=

server

 
/>


20
使用 UpdatePanel            
<
asp:UpdatePanel ID
=

OuterPanel



21
使用 UpdatePanel                             UpdateMode
=

Conditional



22
使用 UpdatePanel                             runat
=

server

>


23
使用 UpdatePanel                
<
ContentTemplate
>


24
使用 UpdatePanel                    
<
div
>


25
使用 UpdatePanel                        
<
fieldset
>


26
使用 UpdatePanel                            
<
legend
>
外层 Panel 
</
legend
>


27
使用 UpdatePanel                            
<
br 
/>


28
使用 UpdatePanel                            
<
asp:Button ID
=

OPButton1



29
使用 UpdatePanel                                        Text
=

外层面板按钮



30
使用 UpdatePanel                                        runat
=

server

 
/>


31
使用 UpdatePanel                            
<
br 
/>


32
使用 UpdatePanel                            最后更新在:

33
使用 UpdatePanel                            
<%=
 DateTime.Now.ToString() 
%>


34
使用 UpdatePanel                            
<
br 
/>


35
使用 UpdatePanel                            
<
br 
/>


36
使用 UpdatePanel                            
<
asp:UpdatePanel ID
=

NestedPanel1



37
使用 UpdatePanel                                               UpdateMode
=

Conditional



38
使用 UpdatePanel                                               runat
=

server

>


39
使用 UpdatePanel                                
<
ContentTemplate
>


40
使用 UpdatePanel                                    
<
div 
class
=

NestedPanel

>


41
使用 UpdatePanel                                        
<
fieldset
>


42
使用 UpdatePanel                                            
<
legend
>
嵌套面板
</
legend
>


43
使用 UpdatePanel                                            
<
br 
/>


44
使用 UpdatePanel                                            最后更新在:

45
使用 UpdatePanel                                            
<%=
 DateTime.Now.ToString() 
%>


46
使用 UpdatePanel                                            
<
br 
/>


47
使用 UpdatePanel                                            
<
asp:Button ID
=

NPButton1



48
使用 UpdatePanel                                                        Text
=

嵌套面板按钮



49
使用 UpdatePanel                                                        runat
=

server

 
/>


50
使用 UpdatePanel                                        
</
fieldset
>


51
使用 UpdatePanel                                    
</
div
>


52
使用 UpdatePanel                                
</
ContentTemplate
>


53
使用 UpdatePanel                            
</
asp:UpdatePanel
>


54
使用 UpdatePanel                        
</
fieldset
>


55
使用 UpdatePanel                    
</
div
>


56
使用 UpdatePanel                
</
ContentTemplate
>


57
使用 UpdatePanel            
</
asp:UpdatePanel
>


58
使用 UpdatePanel        
</
div
>


59
使用 UpdatePanel    
</
form
>


60
使用 UpdatePanel
</
body
>


61
使用 UpdatePanel
</
html
>


62
使用 UpdatePanel

2.5 用程序创建 UpdatePanel 控件

要用程序添加一个 UpdatePanel 控件到页面中,可以先创建一个新的 UpdatePanel 实例,然后使用它的 ContentTemplateContainer 属性的 Add( Control ) 方法来添加其他控件。不能直接使用 ContentTemplate  属性来添加控件。

如果 UpdatePanel 控件是程序添加的,只有来自同样命名容器如 UpdatePanel 控件中控件的回发才可以被使用为面板的触发器。

下列代码演示了如何用程序添加 UpdatePanel 控件。

使用 UpdatePanel
<%
@ Page Language
=

C#

 
%>

使用 UpdatePanel

<!
DOCTYPE html PUBLIC 

-//W3C//DTD XHTML 1.0 Transitional//EN


使用 UpdatePanel 


http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

>

使用 UpdatePanel

<
script runat
=

server

>

使用 UpdatePanel    

protected
 
void
 Page_Load(
object
 sender, EventArgs e)
使用 UpdatePanel使用 UpdatePanel    

使用 UpdatePanel
{

使用 UpdatePanel        UpdatePanel up1 

=
 
new
 UpdatePanel();
使用 UpdatePanel        up1.ID 

=
 

UpdatePanel1

;
使用 UpdatePanel        up1.UpdateMode 

=
 UpdatePanelUpdateMode.Conditional;
使用 UpdatePanel        Button button1 

=
 
new
 Button();
使用 UpdatePanel        button1.ID 

=
 

Button1

;
使用 UpdatePanel        button1.Text 

=
 

Submit

;
使用 UpdatePanel        button1.Click 

+=
 
new
 EventHandler(Button_Click);
使用 UpdatePanel        Label label1 

=
 
new
 Label();
使用 UpdatePanel        label1.ID 

=
 

Label1

;
使用 UpdatePanel        label1.Text 

=
 

A full page postback occurred.

;
使用 UpdatePanel        up1.ContentTemplateContainer.Controls.Add(button1);
使用 UpdatePanel        up1.ContentTemplateContainer.Controls.Add(label1);
使用 UpdatePanel        Page.Form.Controls.Add(up1);
使用 UpdatePanel
使用 UpdatePanel    }


使用 UpdatePanel    

protected
 
void
 Button_Click(
object
 sender, EventArgs e)
使用 UpdatePanel使用 UpdatePanel    

使用 UpdatePanel
{

使用 UpdatePanel        ((Label)Page.FindControl(


Label1

)).Text 
=
 

Panel refreshed at 

 
+

使用 UpdatePanel            DateTime.Now.ToString();
使用 UpdatePanel    }


使用 UpdatePanel

</
script
>

使用 UpdatePanel

<
html xmlns
=

http://www.w3.org/1999/xhtml

>

使用 UpdatePanel

<
head id
=

Head1

 runat
=

server

>

使用 UpdatePanel    

<
title
>
UpdatePanel Added Programmatically Example
</
title
>

使用 UpdatePanel

</
head
>

使用 UpdatePanel

<
body
>

使用 UpdatePanel    

<
form id
=

form1

 runat
=

server

>

使用 UpdatePanel        

<
div
>

使用 UpdatePanel            

<
asp:ScriptManager ID
=

TheScriptManager


使用 UpdatePanel                               runat

=

server

 
/>

使用 UpdatePanel        

</
div
>

使用 UpdatePanel    

</
form
>

使用 UpdatePanel

</
body
>

使用 UpdatePanel

</
html
>

使用 UpdatePanel
使用 UpdatePanel

3 UpdatePanel 的关键属性

ChildrenAsTriggers:

指示来自 UpdatePanel 控件的直接子控件的回发是否更新面板的内容。设置为 true 时更新,否则不更新,默认为 true 。如果此属性设置为 false ,UpdatePanel 控件的 UpdateMode 就必须设置为 Conditional ,否则会抛出 InvalidOperationException 异常。

UpdateMode:

指示什么时候需要更新面板。当一个 UpdatePanel 控件没有包含在另一个 UpatePanel 控件中时,面板的更新是根据 UpdateMode 、ChildrenAsTriggers 属性的设置,以及触发器的集合来进行的。当一个 UpdatePanel 控件在另一个 UpdatePanel 控件内部时,子面板会自动在父面板更新时更新。

UpdatePanel 控件的内容在下列情形下会更新:

  • 如果 UpdateMode 属性设置为 Alwarys 时,UpdatePanel 控件中的内容会在源自页面上任何地方的每个回发时更新。这包括由包含在其他 UpdatePanel 控件中的控件的回发和没有在 UpdatePanel 控件中的回发。
  • 如果 UpdatePanel 控件嵌套在另一个 UpdatePanel 控件中时,父面板更新时它也会被更新。
  • 如果 UpdateMode 属性被设置为 false 时,且出现下列条件之一时:
    • 显式调用 UpdatePanel 控件的 Update() 方法。
    • 由 UpdatePanel 控件中的 Triggers 属性定义的触发器控件引起的回送。在这种情况下,控件会显式的触发面板内容的更新。定义为触发器的控件可以在 UpdatePanel 控件的内部也可以在其外部。
    • ChildrenAsTriggers 属性设置为 true ,并且是由 UpdatePanel 控件中的子控件导致的回发。在嵌套的 UpdatePanel 控件中的子控件不会引起外层 UpdatePanel 控件的更新,除非显示的定义为触发器。

4 总结

由以上内容可以看出,使用 UpdatePanel 控件可以方便的帮助大家开发出具有 AJAX 特性的 ASP.NET 应用程序来。当然,它也不是万能的,过度的使用会引起一定的性能开销,同时它还与现在的部分 ASP.NET 控件不兼容,如 TreeView、Menu,以及 WebParts 控件等。

 
TrackBack:http://www.cnblogs.com/cxy521/archive/2008/01/22/1048264.html

转载于:https://www.cnblogs.com/hdjjun/archive/2008/06/17/1223647.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163514.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux移动文件夹到另一个文件夹怎么移动_linux文件拷贝

    linux移动文件夹到另一个文件夹怎么移动_linux文件拷贝linux中将一个文件或文件夹移动、复制到另一个文件夹的方法

  • C C T V 1_win10安装vs2019系统不支持

    C C T V 1_win10安装vs2019系统不支持EmguCv是在.net平台上对OpenCV的封装,便于OpenCV的跨平台开发使用。

  • 多图详解 DeepMind 的超人类水准星际争霸 AI 「AlphaStar」 …

    多图详解 DeepMind 的超人类水准星际争霸 AI 「AlphaStar」 …雷锋网(公众号:雷锋网)AI科技评论按:英国当地时间1月24日,DeepMind在伦敦组织线上直播,向全世界的游戏AI研究人员以及游戏爱好者们介绍自己的AI研发最新进展。参加直播的DeepMind研究人员是DeepMind团队联合研发负责人OriolVinyals和DavidSilver,后者也是Alph…

  • UTF-8编码占几个字节?

    UTF-8编码占几个字节?Blog:https://www.jsntian.com占2个字节的:带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码占3个字节的:基本等同于GBK,含21000多个汉字占4个字节的:中日韩超大字符集里面的汉字,有5万多个一个utf8数字占1个字节一个utf8英文字母占1个字节少数是汉字每个占用3个字节,多数占用…

  • linux下gdb调试方法与技巧整理「建议收藏」

    linux下gdb调试方法与技巧整理「建议收藏」目录一、gdb简介二、gdb使用流程1、启动gdb2、查看源码3、运行程序4、设置断点5、单步执行6、查看变量7、退出gdb三、gdb基本使用命令1、运行命令2、设置断点3、查看源码4、打印表达式5、查看运行信息6、分割窗口7、cgdb强大工具四、总结一、gdb简介GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。对于一名Linux下…

  • Java list转为object_List集合转JSONObject

    Java list转为object_List集合转JSONObject写代码喜欢用Map拼接返回去给前端,这样得到的也是一个标准的JSON,今天先不说Map的优缺点,我们就来说说JSONObject的使用,我用的是阿里的fastjson,先上代码,当我们需要嵌套代码的时候,看需求:由于sessionData后面是{},所以后面的对象必须是一个JSONObject,如果是sessionData后面是[]就可以使用JSONArray。一般sessionDataExpir…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号