2013-07-23 50 views
0

我有一個服務器控件,我試圖獲取將屬性保存爲控件狀態,但由於某些原因,這些屬性並未在部分回發中持續存在。在服務器控件中使用控制狀態

的僞代碼如下:

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事件中正確設置,但在讀取時爲空。這是由於頁面的週期或什麼?

感謝 傑森

編輯

我描繪出的頁面​​週期是如何運行的路徑:

  1. 用戶點擊異步文件上傳控件的瀏覽按鈕,並選擇文件。這會導致上傳過程開始

    a。 OnInit被稱爲

    b。 LoadControlState被調用

    c。 OnLoad被稱爲

    d。 asyncFileUpload.UploadedComplete被調用,我在這裏設置newFileExt屬性 。

    e。 SaveControlState被調用。 newFileExt在此處設置正確

  2. 用戶單擊控件上的一個按鈕,該控件啓動更新面板 的另一部分回發/更新a。 OnInit被稱爲

    b。 LoadControlState被調用。我可以看到沒有設置newFileExt屬性

    c。 OnLoad被稱爲

    d。按鈕點擊事件被調用並且屬性被讀取(不再設置)

    e。 SaveControlState被調用並且週期結束

+0

* newGetPath *聲明在哪裏? –

+0

對不起,這是一個錯字。我編輯了我原來的帖子。 – jason

回答

0

因此,盡我所知,asyncFileUpload應用程序在ViewStates/ControlState中存在問題。我最終只是使用會話。