ASP.NET AJAX入门系列:使用UpdatePanel控件(一)

翻译|其它|编辑:郝浩|2007-09-11 10:33:18.000|阅读 760 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

UpdatePanel  可以用来创建丰富的局部更新  Web  应用程序,它是  ASP.NET 2.0 AJAX Extensions  中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个  UpdatePanel  控件和一个  ScriptManager  控件就可以自动实现局部更新。通过本文来学习一下  UpdatePanel  简单的使用方法(第一篇)。

主要内容

1UpdatePanel  控件概述

2UpdatePanel  工作原理

3ContentTemplate  属性

4ContentTemplateContainer  属性

5Triggers  属性

一.UpdatePanel  控件概述

UpdatePanel  可以用来创建丰富的局部更新  Web  应用程序,它是  ASP.NET 2.0 AJAX Extensions  中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个  UpdatePanel  控件和一个  ScriptManager  控件就可以自动实现局部更新。通过本文来学习一下  UpdatePanel  工作原理和使用方法。简单的  UpdatePanel  定义如下:重要的属性如下:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    
<ContentTemplate>
        
<!-- -->
    
</ContentTemplate>
    
<Triggers>
        
<asp:AsyncPostBackTrigger />
        
<asp:PostBackTrigger />
    
</Triggers>
</asp:UpdatePanel>

UpdatePanel

属性

说明

ChildrenAsTriggers

  UpdateMode  属性为  Conditional  时,UpdatePanel  中的子控件的异步回送是否会引发  UpdatePanle  的更新。

RenderMode

表示  UpdatePanel  最终呈现的  HTML  元素。Block(默认)表示<div>Inline  表示<span>

UpdateMode

表示  UpdatePanel  的更新模式,有两个选项:Always    ConditionalAlways  是不管有没有  Trigger,其他控件都将更新该  UpdatePanelConditional  表示只有当前  UpdatePanel    Trigger,或  ChildrenAsTriggers  属性为  true  时当前  UpdatePanel  中控件引发的异步回送或者整页回送,或是服务器端调用  Update()方法才会引发更新该  UpdatePanel

二.UpdatePanel  工作原理

UpdatePanel  的工作依赖于  ScriptManager  服务端控件(ASP.NET AJAX  入门系列(2):使用  ScriptManager  控件)和客户端  PageRequestManager  类(Sys.WebForms.PageRequestManager,在后面的客户端类中会专门说到),当  ScriptManager  中允许页面局部更新时,它会以异步的方式回传给服务器,与传统的整页回传方式不同的是只有包含在  UpdatePanel  中的页面部分会被更新,在从服务端返回  HTML  之后,PageRequestManager  会通过操作  DOM  对象来替换需要更新的代码片段。

看一下官方网站提供的  UpdatePanel  工作原理图:

三.ContentTemplate  属性

Contente Template  标签用来定义  UpdatePanel  的内容,在它里面可以放任何  ASP.NET  元素。如果你想要使用编程的手法来控制  UpdatePanel  中的内容,就需要使用  ContenteTemplateContainer,下面会说到,先来看一个简单的  ContentTemplate  的例子。四.ContentTemplateContainer  属性

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    
<ContentTemplate>
        
<asp:Calendar ID="Calendar1" ShowTitle="True" runat="server" />
        
<div>
            Background:
            
<br />
            
<asp:DropDownList ID="ColorList" AutoPostBack="True" OnSelectedIndexChanged="DropDownSelection_Change"
                runat
="server">
                
<asp:ListItem Selected="True" Value="White"> 
                White 
</asp:ListItem>
                
<asp:ListItem Value="Silver"> 
                Silver 
</asp:ListItem>
                
<asp:ListItem Value="DarkGray"> 
                Dark Gray 
</asp:ListItem>
                
<asp:ListItem Value="Khaki"> 
                Khaki 
</asp:ListItem>
                
<asp:ListItem Value="DarkKhaki"> 
                ark Khaki 
</asp:ListItem>
            
</asp:DropDownList>
        
</div>
    
</ContentTemplate>
</asp:UpdatePanel>

事件代码:

<script runat="server">
    
void DropDownSelection_Change(Object sender, EventArgs e)
    
{
        Calendar1.DayStyle.BackColor =
            System.Drawing.Color.FromName(ColorList.SelectedItem.Value);
    }
</script>

如果要使用编程的手法去设置  UpdatePanel  中的内容,需要创建一个  UpdatePanel,并且添加控件到  ContentTemplateContainer,而不能直接添加控件到  ContentTemplate,如果想直接设置  ContentTemplate,则需要编写一个自定义的  Template,并去实现位于  System.Web.UI  命名空间下的接口  ITemplate。看一个简单的来自于官方网站的例子:

<% @ Page Language="C#" %>
<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>

五.Triggers  属性

  ASP.NET AJAX  中有两种  Triggers:分别为  AsyncPostBackTrigger  PostBackTriggerAsyncPostBackTrigge  用来指定某个服务器端控件以及其将触发的服务器端事件作为该  UpdatePanel  的异步更新触发器,它需要设置的属性有控件  ID  和服务端控件的事件;PostBackTrigger  用来指定在  UpdatePanel  中的某个服务端控件,它所引发的回送不使用异步回送,而仍然是传统的整页回送。这一点跟  Atlas  有很大的区别,大家需要注意。看一个小例子,虽然两个  Button  都放在了  UpdatePanel  中,但是由于在  PostBackTrigger  中指定了  Button2,所以它使用的仍然是整页回送。

<% @ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<script runat="server">
    
void Button1_Click(object sender, EventArgs e)
    
{
        
this.Label1.Text = "
更新时间:" + System.DateTime.Now.ToString();
    }
    
void Button2_Click(object sender, EventArgs e)
    
{
        
this.Label1.Text = "
更新时间:" + System.DateTime.Now.ToString();
    }

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>UpdatePanel Trigger Sample</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:ScriptManager ID="ScriptManager1" runat="server">
        
</asp:ScriptManager>
    
</div>
        
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
            
<ContentTemplate>
                
<div>
                    
<asp:Button ID="Button1" runat="server" Text="
异步回送" OnClick="Button1_Click"/>&nbsp;&nbsp;
                    
<asp:Button ID="Button2" runat="server" Text="整页回送" OnClick="Button2_Click"/><br />
                    
<br />
                    
<asp:Label ID="Label1" runat="server" Text="当前时间" Font-Bold="True" Font-Size="Large"></asp:Label></div>
            
</ContentTemplate>
            
<Triggers>
                
<asp:AsyncPostBackTrigger ControlID="Button1"/>
                
<asp:PostBackTrigger ControlID="Button2" />
            
</Triggers>
        
</asp:UpdatePanel>
    
</form>
</body>
</html>


(未完待续)

 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:csdn

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP