0
我有這樣的代碼在用戶控件如下:爲什麼ViewState在控件的屬性在其父級的Control.Render方法中被修改時丟失了?
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
If someCondition Then
childControl.Enabled = false
End If
MyBase.Render(writer)
End Sub
每當someCondition是真實的,childControl.Enabled被渲染事件,爲childControl ViewState中被破壞時設置爲false(即,如果它是一個文本框,用戶輸入的文本丟失)。
請注意,只有ViewState丟失了......該控件仍然使用正確的屬性值進行第一次渲染。僅在回發時,從ViewState恢復屬性時實際上會丟失值。
時間軸是如下:
- 的Page_Load(初始)
屬性經由碼集。 - SaveViewState
- Render
屬性被修改。 - 發生回傳。
- LoadViewState
- 的Page_Load
不變控制 值仍然可用,但不得不在Render方法中設置屬性的控件是空白。 - SaveViewState
我的理解是,ViewState中調用Control.SaveViewState,該呼叫Control.Render之前發生期間成爲固定的...但有一些細微差別,我很想念?
除了在頁面呈現時正確顯示值。只有在回傳之後,缺少的ViewState纔是明顯的。換句話說,如果childControl – AaronSieb 2009-11-09 21:12:20
這並不令人驚訝,它呈現罰款......但你失去了LoadViewState和Page_Load之間的一步...控制更新與張貼的表單值的步驟。因此你的問題。 – Bryan 2009-11-09 21:23:05
你知道嗎,我想你可能是對的。爲了做到這一點,控件必須做出是否要在ViewState中讀取或在Render方法被調用之前提交表單的決定。我會仔細檢查輸出結果,看看會發生什麼。 – AaronSieb 2009-11-09 22:08:56