最近在看ASP.NET 4 入门到精通,看到AJAX 一章中的 UpdatePanel 。平时AJAX估计都不会使用这种控件,一般都直接javascript 脚本实现异步局部刷新,但既然微软提供了这个控件,那就了解一下也好。本以为很简单,而实际上也很简单,但我在按着教程做的时候,走入了个误区,然后 UpdatePanel 控件一直都没什么反应,也无法出现和书籍中相同的结果。上网搜索了好一会,也没能解决什么问题,都是说设置这个设置那个,但实际上 UpdatePanel 控件从工具箱拖出来的时候的默认设置就是可以局部刷新的。
最后发现,我用vs 是新建网站,不是新建项目,而 UpdatePanel 在新建项目中可以正常运行。其实 WebSite 和 Application 的区别了解不是特别清楚,只知道网站是请求过来时服务器再动态编译,而项目则要先编译成dll才能运行,有空要看看MSDN 的文档。 关键是不知道为什么网站不能用UpDatePanel 呢? 上个简单例子先:
先是ASPX 页代码如下:
<form id="form1" runat="server"> <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always" ChildrenAsTriggers="true"> <ContentTemplate> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br/> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> </ContentTemplate> </asp:UpdatePanel> </form>
然后是隐藏代码页代码:
public partial class UpdatePanel : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label2.Text = DateTime.Now.ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = System.DateTime.Now.ToString();
}
}
其实没什么特别的,点击按钮,会发现 UpdatePanel1 控件中的 Label1 显示的时间会刷新,但 UpdatePanel1 控件外的 Label2 控件显示的时间是最初加载显示的时间,结果如下: