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 イベントでは正しく設定されているが、読み取り時には null であることがわかります。これはページの周期か何かによるものですか?

ありがとうジェイソン

編集

ページサイクルがどのように実行されているかのパスをたどりました。

  1. ユーザーが非同期ファイル アップロード コントロールの参照ボタンをクリックし、ファイルを選択します。これにより、アップロードプロセスが開始されます

    を。OnInit が呼び出される

    b. LoadControlState が呼び出される

    c. OnLoad が呼び出される

    d. asyncFileUpload.UploadedComplete が呼び出され、ここで newFileExt プロパティを設定します。

    e. SaveControlState が呼び出されます。newFileExt はここで適切に設定されます

  2. ユーザーがコントロールのボタンをクリックすると、更新パネルの別の部分的なポストバック/更新が開始されます。OnInit が呼び出される

    b. LoadControlState が呼び出されます。newFileExt プロパティが設定されていないことがわかります

    c. OnLoad が呼び出される

    d. ボタンのクリック イベントが呼び出され、プロパティが読み取られます (設定されなくなりました)。

    e. SaveControlState が呼び出され、サイクルが終了します

4

1 に答える 1

0

したがって、私が知る限り、asyncFileUpload アプリケーションには ViewStates/ControlStates に関する問題があります。セッションを使用するだけになりました。

于 2013-07-25T15:29:16.097 に答える