ASP.NET AJAX 控制項(.NET 3.5 內建)提供 ScriptManager、UpdatePanel、Timer 三大核心元件,幾行標記即可實現「每秒更新一次 Label 文字」的即時時鐘,無需撰寫 JavaScript。本文提供完整 .aspx 與 .aspx.cs 代碼,並說明關鍵屬性設定與常見誤區。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowCurrentTime.aspx.cs" Inherits="ShowCurrentTime" %>
<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml">
<head runat="server">
<title>動態顯示即時時間</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<table style="margin:100px auto; width:270px; height:78px;">
<tr><td>動態顯示即時時間</td></tr>
<tr>
<td style="height:100px;">
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
當前時間是:
<asp:Label ID="Label1" runat="server" Text="Label" />
<asp:Timer ID="Timer1" runat="server" Interval="1000" />
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
</table>
</form>
</body>
</html>
public partial class ShowCurrentTime : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
}
}
Interval="1000"(毫秒),每隔指定時間自動觸發非同步 PostBack。必須置於 UpdatePanel 內部,否則會導致整頁重新整理。Page_Load,重新指派 DateTime.Now.ToString(),經 UpdatePanel 部分渲染後回傳瀏覽器。Label1.Text = DateTime.Now.ToString("yyyy-MM-dd"); 或 .ToShortDateString()。DateTime.Now.ToString("HH:mm:ss.fff") 顯示毫秒。CssClass,配合 CSS 設定字體、顏色、閃爍動畫。Timer1.Enabled = false; 可在伺服器端條件式停止更新。| 誤區 | 後果 | 正確做法 |
|---|---|---|
| Timer 放在 UpdatePanel 外部 | 觸發完整 PostBack,頁面閃爍 | Timer 必須在 ContentTemplate 內 |
| 頁面有多個 ScriptManager | 拋出例外 | 全頁僅一個,母版頁放置則內容頁勿再加 |
| UpdatePanel 更新模式預設 Always | 任何 PostBack 皆觸發更新 | 視需求設 UpdateMode="Conditional" + ChildrenAsTriggers="false" |
| 大量資料頻繁更新 | ViewState 膨脹、頻寬浪費 | 關鍵控制項 EnableViewState="false"、或改用 WebAPI + JS 輪詢 |