ASP.NET 4.0 引入,解決舊版自動生成 ID(如 ctl00_ContentPlaceHolder1_GridView1)難以在 JavaScript 中預測的問題。四種模式:
頁面層級設定:<%@ Page ClientIDMode="Predictable" %>;應用程式層級在 web.config:
<system.web>
<pages clientIDMode="Predictable"></pages>
</system.web>
Page 類別新增兩屬性,可在執行期由資料庫動態賦值:
<%@ Page Language="C#" Keywords="關鍵字1,關鍵字2" Description="頁面描述" %>
或在 Code-behind:Page.Keywords = "..."; Page.Description = "...";。
GridView、ListView 等支援。啟用後,換頁時仍保持「第 N 行被選取」而非「索引 N 被選取」。
<asp:ListView ID="topRanks" runat="server" EnablePersistedSelection="True"
DataSourceID="dsRanks" DataKeyNames="rankid"> ... </asp:ListView>
預設 true,允許 Page_Load 等慣用名稱自動綁定事件。缺點:限制事件處理器命名彈性,高流量網站有效能損耗(MSDN 文檔)。建議設為 false 並顯式綁定。
可在執行期新增樣式表、腳本、Meta 標籤:
this.Header.Title = "動態標題";
HtmlLink printLink = new HtmlLink();
printLink.Attributes.Add("rel", "stylesheet");
printLink.Attributes.Add("href", "css/print.css");
this.Header.Controls.Add(printLink);
列印專用樣式表切換的理想場景。
點擊 Label 時焦點自動移至關聯控制項,並支援熱鍵:
<asp:Label ID="lblUserName" AssociatedControlID="txtUserName" Text="使用者名稱:" runat="server" />
<asp:TextBox ID="txtUserName" runat="server" />
ViewState 可被頁面層級關閉,但 ControlState 不會。適合儲存控制項核心運作所需資料(如 GridView 分頁索引)。需覆寫 OnInit 註冊:Page.RegisterRequiresControlState(this);,並實作 SaveControlState/LoadControlState。謹慎使用,因會增加頁面負載。
僅保存指定控制項的指定屬性,減少 ViewState 體積。參考:Implementing an ASP.NET PreserveProperty Control。
ASP.NET 2.0 支援在標籤中依瀏覽器設定不同屬性值:
<asp:Button runat="server"
ie:OnClientClick="alert('Hello IE!')"
mozilla:OnClientClick="alert('Hello Firefox!')"
Text="通用按鈕" OnClientClick="alert('Hello others!')" />
前綴對應 browserCaps 定義的瀏覽器 ID。
在目標頁面宣告來源頁面虛擬路徑,即可直接存取來源頁面的 public 屬性,無需 FindControl:
<%@ PreviousPageType VirtualPath="~/firstpage.aspx" %>
// 目標頁面代碼
var prop = PreviousPage.FirstProperty;