行動文字寫入器呈現的最佳作法
更新:2007 年 11 月
在呈現階段中,所有的 ASP.NET Mobile 裝置配接器都會使用繼承自 MobileTextWriter 基底類別 (Base Class) 的類別寫入其輸出。文字寫入器的實際類別可以專屬於該目標裝置;這時頁面配置器隨即具現化 (Instantiate),並且傳回適當的寫入器。例如,對於需要 cHTML 標記的裝置,ChtmlPageAdapter 便會從其 CreateTextWriter 方法傳回 ChtmlMobileTextWriter 物件。
MobileTextWriter 類別會針對配置器定義一組通用屬性和方法。您可以針對此配置器之寫入器類別的特定控制項配置器定義額外的 Helper 成員。HtmlTextWriter 基底類別的方法,例如 Write、WriteLine 和 WriteBeginTag 都可提供使用,這是因為 MobileTextWriter 類別是繼承自 HtmlTextWriter 基底類別。
強型別 Render 方法
配置器通常需要特定類別的文字寫入器。例如,WmlPageAdapter 需要使用 WmlMobileTextWriter 物件。IControlAdapter 介面的 Render 方法包括 HtmlTextWriter 型別的參數。因此,配置器應該會覆寫 Render 方法,以便提供需要的文字寫入器類別,或是將該寫入器轉型 (Cast) 為需要的類別。
下列範例會示範針對自訂的 CarControl 類別,覆寫 XML 配置器集中之新配置器的 Render 方法。這個自訂配置器的名稱是 XhtmlCarControlAdapter,該名稱遵循新配接器的已建立命名慣例。
// Specialized XhtmlCarControlAdapter Render method
public void Render(XhtmlMobileTextWriter writer)
{
... [rendering code]
}
// Generic XhtmlCarControlAdapter Render method
public override void Render(HtmlTextWriter writer)
{
Render((XhtmlMobileTextWriter)writer);
}
開始和結束回應
在撰寫回應之前,頁面配置器必須呼叫其 Render 方法中的某些方法。下列是頁面配接器的典型動作順序:
呼叫寫入器的 BeginResponse 方法。
呼叫寫入器的 BeginFile 方法,此時會傳入網頁 URL 和資料的需要內容類型 (MIME 類型)。例如,HTML 頁面配置器傳入的內容型別是 text/html。
呈現頁面 (通常是作用中表單)。
呼叫寫入器的 EndFile 方法。
呼叫寫入器的 EndResponse 方法。
下列程式碼範例會說明 HTML 頁面配置器的簡單 Render 方法。
public override void Render(MobileTextWriter writer)
{
writer.BeginResponse();
writer.BeginFile(Page.Request.Url.ToString(), "text/html");
Page.ActiveForm.RenderControl(writer);
writer.EndFile();
writer.EndResponse();
}
輸出編碼方式
MobileTextWriter 類別會提供 Helper 方法來編碼呈現。編碼的方式取決於目標裝置。例如,WML 架構的裝置需要對貨幣符號 ($) 進行編碼。Helper 方法如下:
若要寫入目標裝置的編碼文字,您的配置器可以呼叫該寫入器的 WriteEncodedText 方法。
若要寫入目標裝置的 URL (包含參數),您的配置器可以呼叫該寫入器的 WriteEncodedUrl 方法。
若要寫入目標裝置的 URL 引數 (接在使用者代理字串之查詢符號 [?] 後面的 URL 部分),您的配置器可以呼叫該寫入器的 WriteEncodedUrlParameter 方法。
輸出快取
ASP.NET Web 網頁包含對快取頁面輸出的支援。您可以使用 @ OutputCache 指示詞來快取頁面。
在 Mobile Web 網頁中,快取的輸出必須根據目標裝置而有不同的設定。例如,如果執行 Pocket PC 的 Microsoft Internet Explorer 的裝置要求頁面,則應該只為執行 Pocket PC 的 Internet Explorer 的其他裝置快取和傳回結果頁面。
根據預設,HTTP 使用者代理字串會控制快取 Mobile Web 網頁的變化。然而,其他裝置的輸出也能會受到其他屬性影響。例如,含單一使用者代理字串的裝置,可能有多種螢幕大小設定,而每一個設定都有不同的輸出。為了允許這些變化,此頁面配置器可以覆寫 CacheVaryByHeaders 屬性。
ASP.NET Web 使用者控制項也支援允許其輸出個別進行快取的 @ OutputCache 指示詞。這種支援稱為「部分快取」(Partial Caching)。然而,Mobile Web 網頁中的使用者控制項並不支援這個指示詞。Mobile Web 網頁不支援部分快取,因為使用者控制項的輸出會因頁面的其餘內容而有不同。