aspx文件里面有以下一段代码
<body>
<form id="form1" runat="server">
<div>
<%=DateTime.Now %>
<uc1:UserControl runat="server" ID="UserControl" />
</div>
</form>
</body>
注:UserControl1是外部拖拽进来的一个DropDownList用户控件,切换选项时可以触发页面刷新,可以换成其它的控件,只要能触发刷新就行
运行效果是什么呢?由于获取时间和用户控件的线程是同步的,所以每次切换用户控件都将改变页面上显示的时间。
那如何使得用户控件操作不刷新整个页面,而只刷新自己呢?(这里有点拗口,总之理解为DropDownList选项切换时其它的保持原样而不刷新就行)
这里可以使用两个服务器控件达到目的:UpdatePanel和ScriptManager
我们尝试着在上面的基础上插入几行代码,注意两次代码的区别:
<body>
<form id="form1" runat="server">
<div>
<%=DateTime.Now %>
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<uc1:UserControl runat="server" ID="UserControl" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
我在这里先是添加了一个ScriptManager,然后再用一个UpdatePanel将DDL控件给包了起来
注:<ContentTemplate>的作用是定义更新面板的内容模板,也就是放在这里面的内容才是需要更新的
这次的运行效果是什么呢?
不管怎么切换下拉框的选项,都不会导致页面上时间的改变。
原因是,经过这一处理后,下拉框用户控件选项的改变成了异步请求,不会刷新整个页面,所以前面的时间也不会重新得到获取,因此不会改变
(完)