共用方式為


行動文字寫入器呈現的最佳作法

更新:2007 年 11 月

在呈現階段中,所有的 ASP.NET Mobile 裝置配接器都會使用繼承自 MobileTextWriter 基底類別 (Base Class) 的類別寫入其輸出。文字寫入器的實際類別可以專屬於該目標裝置;這時頁面配置器隨即具現化 (Instantiate),並且傳回適當的寫入器。例如,對於需要 cHTML 標記的裝置,ChtmlPageAdapter 便會從其 CreateTextWriter 方法傳回 ChtmlMobileTextWriter 物件。

MobileTextWriter 類別會針對配置器定義一組通用屬性和方法。您可以針對此配置器之寫入器類別的特定控制項配置器定義額外的 Helper 成員。HtmlTextWriter 基底類別的方法,例如 WriteWriteLineWriteBeginTag 都可提供使用,這是因為 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 方法中的某些方法。下列是頁面配接器的典型動作順序:

  1. 呼叫寫入器的 BeginResponse 方法。

  2. 呼叫寫入器的 BeginFile 方法,此時會傳入網頁 URL 和資料的需要內容類型 (MIME 類型)。例如,HTML 頁面配置器傳入的內容型別是 text/html。

  3. 呈現頁面 (通常是作用中表單)。

  4. 呼叫寫入器的 EndFile 方法。

  5. 呼叫寫入器的 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 網頁不支援部分快取,因為使用者控制項的輸出會因頁面的其餘內容而有不同。

請參閱

概念

控制項和配接器的互動

其他資源

加入新裝置配接器和裝置支援