服务器控件的异步请求——UpdatePanel和ScriptManager

时间:2021-12-25 14:34:03

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>的作用是定义更新面板的内容模板,也就是放在这里面的内容才是需要更新的

这次的运行效果是什么呢?

不管怎么切换下拉框的选项,都不会导致页面上时间的改变。

原因是,经过这一处理后,下拉框用户控件选项的改变成了异步请求,不会刷新整个页面,所以前面的时间也不会重新得到获取,因此不会改变

(完)