【问题标题】:using control states in server control在服务器控制中使用控制状态
【发布时间】:2013-07-23 18:58:22
【问题描述】:

我有一个服务器控件,我正试图将属性保存为控件状态,但由于某种原因,这些属性在部分回发中没有保留。

伪代码如下:

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. 用户单击异步文件上传控件的浏览按钮并选择一个文件。这会导致上传过程开始

    一个。 OnInit 被调用

    b. LoadControlState 被调用

    c。 OnLoad 被调用

    d。 asyncFileUpload.UploadedComplete 被调用,我设置了 newFileExt 属性 这里。

    e。 SaveControlState 被调用。 newFileExt 在这里设置正确

  2. 用户单击控件上的按钮启动更新面板的另一个部分回发/更新 一种。 OnInit 被调用

    b. LoadControlState 被调用。我可以看到 newFileExt 属性没有设置

    c。 OnLoad 被调用

    d。按钮单击事件被调用并读取属性(不再设置)

    e。 SaveControlState 被调用并且循环结束

【问题讨论】:

  • 在哪里声明了 newGetPath
  • 抱歉,打错了。我已经编辑了我的原始帖子。

标签: asp.net vb.net ajaxcontroltoolkit servercontrols


【解决方案1】:

因此,据我所知,asyncFileUpload 应用程序存在 ViewStates/ControlStates 问题。我最终只是使用会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2012-01-23
    • 2014-12-30
    • 2015-12-21
    • 2015-03-22
    相关资源
    最近更新 更多