コントロールの状態としてプロパティを保存しようとしているサーバー コントロールがありますが、何らかの理由で、部分的なポストバック間でプロパティが保持されません。
疑似コードは次のとおりです。
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 イベントでは正しく設定されているが、読み取り時には null であることがわかります。これはページの周期か何かによるものですか?
ありがとうジェイソン
編集
ページサイクルがどのように実行されているかのパスをたどりました。
ユーザーが非同期ファイル アップロード コントロールの参照ボタンをクリックし、ファイルを選択します。これにより、アップロードプロセスが開始されます
を。OnInit が呼び出される
b. LoadControlState が呼び出される
c. OnLoad が呼び出される
d. asyncFileUpload.UploadedComplete が呼び出され、ここで newFileExt プロパティを設定します。
e. SaveControlState が呼び出されます。newFileExt はここで適切に設定されます
ユーザーがコントロールのボタンをクリックすると、更新パネルの別の部分的なポストバック/更新が開始されます。OnInit が呼び出される
b. LoadControlState が呼び出されます。newFileExt プロパティが設定されていないことがわかります
c. OnLoad が呼び出される
d. ボタンのクリック イベントが呼び出され、プロパティが読み取られます (設定されなくなりました)。
e. SaveControlState が呼び出され、サイクルが終了します