惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
Y
Y Combinator Blog
I
InfoQ
美团技术团队
罗磊的独立博客
B
Blog RSS Feed
GbyAI
GbyAI
小众软件
小众软件
IT之家
IT之家
Engineering at Meta
Engineering at Meta
Blog — PlanetScale
Blog — PlanetScale
V
V2EX
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
MyScale Blog
MyScale Blog
博客园 - 聂微东
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss

博客园 - HenryZhang

Javascript 使用类 用javascript按需加载.js和.css文件 考虑了全半角的SubString window.open 打开的窗口关闭后 javascript小技巧 看完越狱20件必须懂的东西(转) vs2005 安装sp1 NHibernate1.2在VS2005下的配置 AJAX第十一天 AJAX第十天 AJAX第九天 AJAX第七天 AJAX第八天 AJAX第六天 JavaScript常用正则表达式 JS正则表达式问题终于解决 Ajax第五天 上传文件时用到的显示文件大小 除去所有在html元素中标记
Ajax第四天
HenryZhang · 2007-01-24 · via 博客园 - HenryZhang

开始学习UpdatePanel控件,好像是个非常常用的控件。

先看一下基本的结构:

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

该控件的强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自动实现局部更新。
ContenteTemplate标签用来定义UpdatePanel的内容,在它里面可以放任何ASP.NET元素。如果你想要使用编程的手法来控制UpdatePanel中的内容,就需要使用ContenteTemplateContainer
ContenteTemplate太简单了,只需要像平时使用控件一样往里堆就可以了,控件的事件也没有什么特殊的,但是如果要使用编程的手法去设置UpdatePanel中的内容,需要创建一个UpdatePanel,并且添加控件到ContentTemplateContainer,而不能直接添加控件到ContentTemplate,如果想直接设置ContentTemplate,则需要编写一个自定义的Template,并去实现位于System.Web.UI命名空间下的接口ITemplate

看一个使用ContentTemplateContainer的例子:
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();
    }

不用多解释了,只要知道创建好控件后,加到ContentTemplateContainer里:)

再来看看Triggers属性:

ASP.NET AJAX中有两种Triggers:分别为AsyncPostBackTriggerPostBackTrigger,简单地说,AsyncPostBackTrigger就是异步调用、局部更新,和我们预想的Ajax效果一样,PostBackTrigger就是整个页面都要刷新(还不理解,既然整个页都刷新了,为什么还要用这个:( ),还是看一个例子:

<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>

TerryLee的UpdatePanel(一)就到这,咱也先抄到这吧,HOHO!