最近在看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 控件顯示的時間是最初加載顯示的時間,結果如下:

