上一篇文章说明了在UpdatePanel中RenderMode的学习,这个属性主要是在客户端如何解析UdpatePanel,是生成div,还是生成span,我们也介绍了两者到底有什么样的区别。这一篇文章我主要是想说一下UpdateMode属性的作用。再次声明一下,这主要是对赵老师的视频所做的笔记,这样,有利于我对接收到的知道的再次加工,可以有利于我对知识的理解。
UpdateMode先从字面上理解一下,就是更新模式的意思。他有两个属性值,一个是always ,另外一个是conditional。到底是怎么回事呢,我还是用赵老师的事例先来说明一下问题。在页面中拖两个updatapanel上去,如下所示:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate >
<%=DateTime.Now %>
<asp:Button ID="Button1" runat="server" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
<hr />
<asp:UpdatePanel ID="UpdatePanel2" UpdateMode ="conditional" runat="server">
<ContentTemplate >
<%=DateTime.Now %>
<asp:Button ID="Button2" runat="server" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
在第一个updatepanel里面包含一个显示当前时间和一个按钮,显示时间主要是用datetime类来实现,按钮的作用是触发更新页面的事件,虽然这个按钮事件什么都没写,但是只要你一点击,就会给服务器发送一个请求,当得到回应的时候,就会刷新一下页面。
第二个updatepanel,和第一个updatepanel唯一不同的是把他的UpdateMode属性设置成了conditional。第一个不设置的原因是当updatepanel没有设置updateMode属性的时候,则默认为always 。运行这个程序,则可以得到如下的界面:

我再来扩展的说一下。ajax技术给我们带来的体验就是可以局部更新,在asp.Net里面,这个updatepanel给我们带来的之一的感觉就是局部刷新——在updatepanel里面的数据改变了,其它地方的数据没有改变。呵呵。但是如果把updatepanel的updateMode设置成alway的进时候,虽然在这个程序中感观上带来的感觉是页面也没有刷新,但给我们带来的问题就是在我们不希望刷新的地方刷新了,比如说上面的例子中,我点第二个按钮的时候,可能我希望改变的只是第二个updatepanel里面的数据,可是很不幸。再展升一下,这样导致的后果是什么呢,加大了数据的通信量,当页面很大的时候,这个体验就会给我们带来很慢的感觉。所以大家都说,最好把updateMode设置成为condicational。这样,在我要你改变的时候,你才能改变,你不能被其它的因素左右,一个很自私的作法,但是效果却很好。