0

I have a server control that I am trying to get to save properties as control states but for some reason the properties are not persisting across partial postbacks.

The psuedo code is as follows:

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

On this control is an asyncFileUpload ajaxcontroltoolkit control and a button. I have an event for upload complete:

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

So, UploadedComplete is complete it should set the controls state. then, when the user click the button it should read it. Through debugging, I can see that it is set correctly in UploadedComplete event but null when read. Is this due to the cycle of the page or something?

Thanks jason

EDIT

I traced out the path for how the page cycle is running:

  1. User clicks the async file upload control's browse button and selects a file. This causes the upload process to start

    a. OnInit gets called

    b. LoadControlState gets called

    c. OnLoad gets called

    d. asyncFileUpload.UploadedComplete gets called and I set the newFileExt property here.

    e. SaveControlState gets called. newFileExt is set here properly

  2. User clicks a button on the control that initiates another partial postback/update of the update panel a. OnInit gets called

    b. LoadControlState gets called. I can see that the newFileExt property is not set

    c. OnLoad gets called

    d. Buttons click event gets called and the property is read (which is no longer set)

    e. SaveControlState gets called and cycle ends

jason
  • 3,821
  • 10
  • 63
  • 120

1 Answers1

0

So, as best as I can tell, the asyncFileUpload application has issues with ViewStates/ControlStates. I ended up just just using sessions.

jason
  • 3,821
  • 10
  • 63
  • 120