Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在服务器控件中使用控件状态_Asp.net_Vb.net_Ajaxcontroltoolkit_Servercontrols - Fatal编程技术网

Asp.net 在服务器控件中使用控件状态

Asp.net 在服务器控件中使用控件状态,asp.net,vb.net,ajaxcontroltoolkit,servercontrols,Asp.net,Vb.net,Ajaxcontroltoolkit,Servercontrols,我有一个服务器控件,试图将属性保存为控件状态,但由于某些原因,这些属性无法在部分回发中持久化 psuedo代码如下所示: Public Class FileUpload Inherits ScriptControl Implements INamingContainer, IPostBackEventHandler Public Property newFileExt() As String Get Dim foundList A

我有一个服务器控件,试图将属性保存为控件状态,但由于某些原因,这些属性无法在部分回发中持久化

psuedo代码如下所示:

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是complete,它应该设置控件状态。然后,当用户单击按钮时,它应该读取它。通过调试,我可以看到它在UploadedComplete事件中设置正确,但在读取时设置为null。这是由于页面的循环还是其他原因

谢谢 杰森

编辑

我找到了页面循环运行的路径:

  • 用户单击异步文件上载控件的浏览按钮并选择一个文件。这将导致上载过程启动

    a。OnInit被呼叫

    b。调用LoadControlState

    c。OnLoad被调用

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

    e。调用SaveControlState。此处正确设置了newFileExt

  • 用户单击控件上的按钮,启动更新面板的另一部分回发/更新 A.OnInit被呼叫

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

    c。OnLoad被调用

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

    e。调用SaveControlState并结束循环


  • 因此,据我所知,asyncFileUpload应用程序存在ViewState/ControlState问题。我最后只是使用了会话

    newGetPath声明在哪里?抱歉,这是一个输入错误。我编辑了我原来的帖子。