使用 UpdatePanel 【转by Dorian Deng】
1 概述
1.1 场景
1.2 背景
2 UpdatePanel 的使用
UpdateMode="Conditional"
runat="server">
<ContentTemplate>
<asp:Button ID="Button1"
Text="RefreshPanel"
runat="server"/>
</ContentTemplate>
</asp:UpdatePanel>
UpdatePanel 控件可以输出为 <div> 元素或 <span> 元素,以在页面中形成一个块或内联的区域,可以设置其 RenderMode 属性为 Block ( 默认,<div>)或 Inline ( <span> ) 来指定。
2.1 指定 UpdatePanel 的内容
包含一个或多个 UpdatePanel 控件的页面在第一次输出时,所有 UpdatePanel 控件中的内容都会被输出并被发送到浏览器。在后来的异步更新中,单个 UpdatePanel 控件中的内容可能会被更新。更新依赖于面板的设置、导致回发的元素以及指定给每个面板的代码。
2.2 指定 UpdatePanel 的触发器
下列示例展示了如何添加一个触发器到 UpdatePanel 面板中去。
Text="Refresh Panel"
runat="server" />
<asp:ScriptManager ID="ScriptManager1"
runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" />
</Triggers>
<ContentTemplate>
<fieldset>
<legend>UpdatePanel 内容</legend>
<%=DateTime.Now.ToString() %>
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
触发器由在 UpdatePanel 控件的 <Triggers> 元素中的 <asp:AsyncPostBackTrigger> 元素定义。(如果是在 Visual Studio 中编辑页面,就可以在 UpdatePanel 的属性面板中单击 Triggers 属性后面的省略号按钮打开一个 UpdatePanelTrigger 集合编辑器对话框来创建触发器。)触发器必要的属性是 ControlID ,用它来指定可以导致面板更新的控件的 ID 。
有上例中,虽然按钮没有声明在面板中,但是由于在面板中指定了它为触发器,所以当按钮事件触发时,会产生其被包含中面板中同样的结果,即面板被更新。
触发器控件的事件是可选的,如果没有指定事件,触发器将使用控件的默认事件。例如,对于 Button 控件,默认事件就是 Click 事件。
2.3 在母版页中使用 UpdatePanel
如果在母版页中没有包含 ScriptManager 控件,就必须在包含 UpdatePanel 控件的每个内容页是都要放置一个 ScriptManager 控件,设计的选择依赖于在应用程序中将如何管理客户端脚本。
如果在母版页中包含了 ScriptManager 控件,而在某个内容页中又不打算使用局部页面输出的功能时,必须用程序设置内容中的 ScriptManager 控件的 EnablePartialRendering 为 false 。
2.4 使用嵌套的 UpdatePanel 控件
下列代码展示了如何在一个 UpdatePanel 控件中定义另一个 UpdatePanel 控件。
<!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>UpdatePanelUpdateMode 示例</title>
<style type="text/css">
div.NestedPanel
{
position: relative;
margin: 2% 5% 2% 5%;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager"
runat="server" />
<asp:UpdatePanel ID="OuterPanel"
UpdateMode="Conditional"
runat="server">
<ContentTemplate>
<div>
<fieldset>
<legend>外层 Panel </legend>
<br />
<asp:Button ID="OPButton1"
Text="外层面板按钮"
runat="server" />
<br />
最后更新在:
<%= DateTime.Now.ToString() %>
<br />
<br />
<asp:UpdatePanel ID="NestedPanel1"
UpdateMode="Conditional"
runat="server">
<ContentTemplate>
<div class="NestedPanel">
<fieldset>
<legend>嵌套面板</legend>
<br />
最后更新在:
<%= DateTime.Now.ToString() %>
<br />
<asp:Button ID="NPButton1"
Text="嵌套面板按钮"
runat="server" />
</fieldset>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</fieldset>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
2.5 用程序创建 UpdatePanel 控件
如果 UpdatePanel 控件是程序添加的,只有来自同样命名容器如 UpdatePanel 控件中控件的回发才可以被使用为面板的触发器。
下列代码演示了如何用程序添加 UpdatePanel 控件。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
UpdatePanel up1 = new UpdatePanel();
up1.ID = "UpdatePanel1";
up1.UpdateMode = UpdatePanelUpdateMode.Conditional;
Button button1 = new Button();
button1.ID = "Button1";
button1.Text = "Submit";
button1.Click += new EventHandler(Button_Click);
Label label1 = new Label();
label1.ID = "Label1";
label1.Text = "A full page postback occurred.";
up1.ContentTemplateContainer.Controls.Add(button1);
up1.ContentTemplateContainer.Controls.Add(label1);
Page.Form.Controls.Add(up1);
}
protected void Button_Click(object sender, EventArgs e)
{
((Label)Page.FindControl("Label1")).Text = "Panel refreshed at " +
DateTime.Now.ToString();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>UpdatePanel Added Programmatically Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="TheScriptManager"
runat="server" />
</div>
</form>
</body>
</html>
3 UpdatePanel 的关键属性
UpdateMode:
UpdatePanel 控件的内容在下列情形下会更新:
- 如果 UpdateMode 属性设置为 Alwarys 时,UpdatePanel 控件中的内容会在源自页面上任何地方的每个回发时更新。这包括由包含在其他 UpdatePanel 控件中的控件的回发和没有在 UpdatePanel 控件中的回发。
- 如果 UpdatePanel 控件嵌套在另一个 UpdatePanel 控件中时,父面板更新时它也会被更新。
- 如果 UpdateMode 属性被设置为 Conditional 时,且出现下列条件之一时:
- 显式调用 UpdatePanel 控件的 Update() 方法。
- 由 UpdatePanel 控件中的 Triggers 属性定义的触发器控件引起的回送。在这种情况下,控件会显式的触发面板内容的更新。定义为触发器的控件可以在 UpdatePanel 控件的内部也可以在其外部。
- ChildrenAsTriggers 属性设置为 true ,并且是由 UpdatePanel 控件中的子控件导致的回发。在嵌套的 UpdatePanel 控件中的子控件不会引起外层 UpdatePanel 控件的更新,除非显示的定义为触发器。
4 总结
由以上内容可以看出,使用 UpdatePanel 控件可以方便的帮助大家开发出具有 AJAX 特性的 ASP.NET 应用程序来。当然,它也不是万能的,过度的使用会引起一定的性能开销,同时它还与现在的部分 ASP.NET 控件不兼容,如 TreeView、Menu,以及 WebParts 控件等。
转载于:https://www.cnblogs.com/Godblessyou/archive/2010/07/16/1779166.html
使用 UpdatePanel 【转by Dorian Deng】相关推荐
- [导入]3.5 [ Enterprise Library ]注入模型设计
摘要: Enterprise Library 使用一个定制的底层的名为 ObjectBuilder的系统在运行时注入适当类型的对象的实例(实例有预设的属性)到应用程序中. 阅读全文 Dorian D ...
- [导入]第 3 章 Enterprise Library 的设计
摘要: Enterprise Library 在所有设计中加入了最佳实践集. 阅读全文 Dorian Deng 2007-09-29 21:37 发表评论 文章来源:http://www.cnblo ...
- 1.2 Enterprise Library 应用程序块
版权所有(c) 2007 Dorian Deng.署名 共享 非商用. 转载请注明出处:http://www.cnblogs.com/doriandeng/archive/2007/09/29/91 ...
- 弃用数据库自增ID,曝光一下我自己用到的解决方法之---终结篇
我写这篇随笔的目的旨在 澄清我在上一篇随笔 "弃用数据库自增ID,曝光一下我自己用到的解决方法" 中的一些事实与看法,同时,我将继续在并发的问题的作题, 我将在原来的存储过程上得用 ...
- 《博客园精华集---CLR/C#分册》
<博客园精华集---CLR/C#分册> 转:http://www.cnblogs.com/anytao/archive/2008/09/04/lovechina_bestclr_3rdfi ...
- asp.net ajax学习系列功能强大的UpdatePanel控件
先给一个简单的例子,后面给一个比较复杂的例子. 改进后的UpdatePanel使页面部分更新(Partial-Page Updates)实现起来非常容易. 要想在已有web页面或新建页面中加入部分更新 ...
- 让Updatepanel中的控件触发整个页面Postback
GridView被Updatepanel包起来了,但是GridView上有一个Download的ImageButton, 局部刷新的话,无法下载文件, 所以用下面代码注册updatepanel中的do ...
- UpdatePanel AsyncPostBackTrigger PostBackTrigger 区别
1.使用代码的方式进行编写. 2. Trigger属性: 1)AsyncPostBackTrigger :只是UpdatePanel中指定的进行了局部刷新. 2)PostBackTrigger : 整 ...
- NET使用了UpdatePanel后如何弹出对话框!
在ajax中的UpdatePanel弹出对话窗,可以使用: ScriptManager.RegisterStartupScript(UpdatePanel1, this.GetType(), &quo ...
最新文章
- python用sqlite数据库创建的表在哪里_用Python在sqlite3数据库中创建两个表
- ccna学习笔记之五:路由器密码恢复
- 第一课 计算机网络的分类,第一课-计算机网络基本组成
- 去掉字符串后面所有的0 去掉字符串前面或后面的0;
- 这辆迷你摩托车,很酷!
- 卫星为什么在那么高的太空能看清地面?
- Atitit go语言 golang 艾提拉总结特性优缺点 目录 1. Go 语言最主要的特性:	1 2. 体积大概100M	1 3. 问题	1 3.1. 编译速度和异常控制怎么样	1 3.2.
- Linux c中一些常用函数总结(c语言中文网。。。)
- 预处理_浅析雨水收集系统——雨水预处理
- linux计划任务失败如何排查原因
- 快速从B站下载视频到本地(无需安装软件)
- Python探路-多重继承
- 计算指定位数的圆周率
- 【Unity Shader 中Pass相关介绍_第一篇】
- 网页信息抓取-如何获取延迟加载的网页数据
- Local Linear Model, Semi Local Linear Model and Local Level Model of TFP.STS
- linux skb机制,skb 的分配细节
- 矩阵论代码实践之满秩分解
- opta球员大数据预测胜负_大数据预测简介及使用流程
- 2019年六月前端面试经验总结
热门文章
- python学习音频-Python 音频数据扩充的技巧
- python读取excel-Python读取Excel表格
- python编程 语言-python程序设计语言
- r语言和python-r语言和python学哪个?
- python学费多少-python培训学费是多少?
- python学完可以干啥-Python学完可以做什么
- python项目归纳总结-【第108期】总结最近项目中常用的几个Python库
- winpython使用教程-如何使用Python自动控制windows桌面
- python实现http下载文件-Python实现http文件下载
- python电脑配置要求cpu-python指定cpu使用率,与内存占用率