我有一個服務器控件,我試圖獲取將屬性保存爲控件狀態,但由於某些原因,這些屬性並未在部分回發中持續存在。在服務器控件中使用控制狀態
的僞代碼如下:
Public Class FileUpload
Inherits ScriptControl
Implements INamingContainer, IPostBackEventHandler
Public Property newFileExt() As String
Get
Dim foundList As String = DirectCast(ViewState(Me.UniqueID & "_fileExt"), String)
If foundList IsNot Nothing Then
Return foundList
Else
Return String.Empty
End If
End Get
Set(ByVal value As String)
ViewState(Me.UniqueID & "_fileExt") = value
End Set
End Property
Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
MyBase.OnInit(e)
Page.RegisterRequiresControlState(Me)
End Sub
Protected Overrides Function SaveControlState() As Object
Dim controlState(6) As Object
controlState(0) = MyBase.SaveControlState()
controlState(1) = newFileExt
Return controlState
End Function
Protected Overrides Sub LoadControlState(ByVal savedState As Object)
Dim controlState() As Object
controlState = CType(savedState, Object)
MyBase.LoadControlState(controlState(0))
newFileExt = CType(controlState(1), String)
End Sub
end class
在此控制是一種asyncFileUpload ajaxcontroltoolkit控制和一個按鈕。我有一個事件上傳完成:
Protected Sub SaveUploadedFile(ByVal sender As Object, ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs) Handles asyncFileUpload.UploadedComplete
newFileExt= "Some Value"
end sub
Protected Sub bntSelectResults_click(ByVal sender As Object, ByVal e As EventArgs) Handles bntSelectResults.Click
If (newFileExt= "") Then
'this always returns as empty
End If
end sub
因此,UploadedComplete是完整的,它應該設置控件狀態。然後,當用戶點擊按鈕時,它應該讀取它。通過調試,我可以看到它在UploadedComplete事件中正確設置,但在讀取時爲空。這是由於頁面的週期或什麼?
感謝 傑森
編輯
我描繪出的頁面週期是如何運行的路徑:
用戶點擊異步文件上傳控件的瀏覽按鈕,並選擇文件。這會導致上傳過程開始
a。 OnInit被稱爲
b。 LoadControlState被調用
c。 OnLoad被稱爲
d。 asyncFileUpload.UploadedComplete被調用,我在這裏設置newFileExt屬性 。
e。 SaveControlState被調用。 newFileExt在此處設置正確
用戶單擊控件上的一個按鈕,該控件啓動更新面板 的另一部分回發/更新a。 OnInit被稱爲
b。 LoadControlState被調用。我可以看到沒有設置newFileExt屬性
c。 OnLoad被稱爲
d。按鈕點擊事件被調用並且屬性被讀取(不再設置)
e。 SaveControlState被調用並且週期結束
* newGetPath *聲明在哪裏? –
對不起,這是一個錯字。我編輯了我原來的帖子。 – jason