2013-07-23 3 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 

На этом элементе управления является контроль ajaxcontroltoolkit asyncFileUpload и кнопка. У меня есть событие для загрузки:

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. Это связано с циклом страницы или чем-то еще?

Благодаря Джейсона

EDIT

Я начертил путь для того, как цикл страницы выполняется:

  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/ControlStates. В итоге я просто использовал сеансы.

Смежные вопросы