上一篇文章说明了在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。运行这个程序,则可以得到如下的界面:
下面我描述一下执行的效果,当点击第一个按钮的时候,则只有横线上面的时间会更新,当点击下面的按钮的时候,则两个时间都会更新。为什么会这样呢,我们设置了横线上方的updatepanel的updateMode为always,下面的updateMode属性为condicational。从字面意思上理解一下,第一个updatepanel为总是更新,第二个是只有满足了条件才会更新,从上面执行的效果也可以看得到,第一个里面的时间不管是按点击哪一个按钮,总是会更新,下面的时间,只有点击下面的按钮才会更新,那么这个条件是什么呢?可能大家已经理会的到了。下面我就把这层窗户纸点破。如果设置为always,则意味着在页面上的任何控件的操作都会使updatepanel里面的数据进行更新,而设置为condicational,则只有在本updatepanel里面的控件引发的操作才会更新。哦!!一下子天变成了蓝色。
我再来扩展的说一下。ajax技术给我们带来的体验就是可以局部更新,在asp.Net里面,这个updatepanel给我们带来的之一的感觉就是局部刷新——在updatepanel里面的数据改变了,其它地方的数据没有改变。呵呵。但是如果把updatepanel的updateMode设置成alway的进时候,虽然在这个程序中感观上带来的感觉是页面也没有刷新,但给我们带来的问题就是在我们不希望刷新的地方刷新了,比如说上面的例子中,我点第二个按钮的时候,可能我希望改变的只是第二个updatepanel里面的数据,可是很不幸。再展升一下,这样导致的后果是什么呢,加大了数据的通信量,当页面很大的时候,这个体验就会给我们带来很慢的感觉。所以大家都说,最好把updateMode设置成为condicational。这样,在我要你改变的时候,你才能改变,你不能被其它的因素左右,一个很自私的作法,但是效果却很好。
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。这样,在我要你改变的时候,你才能改变,你不能被其它的因素左右,一个很自私的作法,但是效果却很好。