支援私用檢視狀態
更新:2007 年 11 月
除了應用程式檢視狀態,您還可以維護 ASP.NET Mobile 控制項的私用狀態資訊。當行動控制項維護內部資訊時,建議您不要依靠應用程式設定來保存這類資訊。而是撰寫應用程式,使其使用私用檢視狀態。私用檢視狀態的範例包括目前頁面上作用中的表單、表單的重新編頁資訊,以及控制項配置器 (Adapter) 所做的裝置特定決策。
私用檢視狀態在許多方面都與應用程式檢視狀態不同。它是以呈現的頁面寫出,而不是儲存在工作階段 (Session) 狀態中。應用程式也無法停用它。而且因為所有的私用狀態都是動態產生,所以應用程式檢視狀態所使用的追蹤語意 (Semantics) 並不會套用到私用檢視狀態。
若要使用私用檢視狀態,控制項必須覆寫 LoadPrivateViewState 和 SavePrivateViewState 方法。這些方法與 LoadViewState 和 SaveViewState 方法的運作方式相同。請勿將控制項撰寫成使用應用程式檢視狀態機制 (例如 ViewState 狀態屬性) 來儲存屬於私用檢視狀態之一部分的設定。
控制項配接器也可以加入私用檢視狀態。控制項配接器可以實作 LoadAdapterState 和 SaveAdapterState 方法。這些方法是分別從 LoadPrivateViewState 和 SavePrivateViewState 方法的 MobileControl 基底類别 (Base Class) 實作 (Implementation) 呼叫。
因為私用檢視狀態是寫入至用戶端,而且不受應用程式的控制,所以您的行動控制項一定會盡量有效率地使用私用檢視狀態。下列範例說明最佳化控制項實作的技巧。
protected override Object SavePrivateViewState()
{
Object baseState = base.SavePrivateViewState;
Object myState = GetMyState();
if (baseState == null && myState == null)
return null;
else if (myState == null)
return baseState;
else
return new Object[] { baseState, myState };
}
protected override void LoadPrivateViewState(Object state)
{
if (state is Object[])
{
Object[] arr = (Object [])state;
base.LoadPrivateViewState(arr[0]);
LoadMyState(arr[1]);
}
else if (state != null)
base.LoadPrivateViewState(state);
}
如果控制項沒有任何要儲存的私用檢視狀態,其便會從 SavePrivateViewState 方法傳回 null。請注意,您不需要使用私用檢視狀態來儲存已設定為其預設值的屬性。