【问题标题】:Treeview map file to Web address rather than directory addressTreeview 将文件映射到 Web 地址而不是目录地址
【发布时间】:2023-03-31 23:47:01
【问题描述】:

我正在尝试设置一个允许用户浏览 Web 服务器上的文件目录的页面。

目的是允许用户在给定的目录结构中放置文件,代码将根据目录创建树视图。

在设置 Nodes Navigate URL 时,它会映射到 C:\Staging\Files,这显然在 Web 上不起作用。我需要映射到http://webaddress/staging/files 等

这是有问题的代码

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load


    If Not Page.IsPostBack Then
        '
        Dim rootDir As New DirectoryInfo("C:\Staging\")
        ' Enter the RecurseNodes function to recursively walk the directory tree. 
        Dim RootNode As TreeNode = RecurseNodes(rootDir)
        ' Add this Node hierarchy to the TreeNode control. 
        Treeview1.Nodes.Add(RootNode)
    End If
End Sub

Private Function RecurseNodes(ByVal thisDir As DirectoryInfo) As TreeNode


    Dim thisDirNode As New TreeNode(thisDir.Name, Nothing)
    ' Get all the subdirectories in this Directory. 
    Dim subDirs As DirectoryInfo() = thisDir.GetDirectories()
    For Each subDir As DirectoryInfo In subDirs
        thisDirNode.ChildNodes.Add(RecurseNodes(subDir))
    Next
    ' Now get the files in this Directory. 
    Dim files As FileInfo() = thisDir.GetFiles()
    For Each file As FileInfo In files
        Dim thisFileNode As New TreeNode(file.Name, Nothing)
        **thisFileNode.NavigateUrl = file.FullName**
        thisDirNode.ChildNodes.Add(thisFileNode)
    Next
    Return thisDirNode
End Function

【问题讨论】:

    标签: asp.net treeview


    【解决方案1】:

    我认为你应该采取相反的方法。与其在磁盘上获取物理路径的内容,不如尝试使用Server.MapPath 来获取虚拟路径的内容,并将其与基本 URL 结合起来:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            Dim RootNode As TreeNode = RecurseNodes("~/files")
            TreeView1.Nodes.Add(RootNode)
        End If
    End Sub
    
    Private Overloads Function RecurseNodes(ByVal virtualPath As String) As TreeNode
        If Not VirtualPathUtility.IsAbsolute(virtualPath) Then virtualPath = VirtualPathUtility.ToAbsolute(virtualPath)
        virtualPath = VirtualPathUtility.RemoveTrailingSlash(virtualPath)
        Dim baseUrl As String = Request.Url.GetLeftPart(UriPartial.Authority) + virtualPath
        Return RecurseNodes(New DirectoryInfo(Server.MapPath(virtualPath)), baseUrl)
    End Function
    
    Private Overloads Function RecurseNodes(ByVal thisDir As DirectoryInfo, ByVal baseUrl As String) As TreeNode
        Dim thisDirNode As New TreeNode(thisDir.Name, Nothing)
        Dim subDirs As DirectoryInfo() = thisDir.GetDirectories()
        For Each subDir As DirectoryInfo In subDirs
            thisDirNode.ChildNodes.Add(RecurseNodes(subDir, baseUrl + subDir.Name + "/"))
        Next
        Dim files As FileInfo() = thisDir.GetFiles()
        For Each file As FileInfo In files
            Dim thisFileNode As New TreeNode(file.Name, Nothing)
            thisFileNode.NavigateUrl = baseUrl + file.Name
            thisDirNode.ChildNodes.Add(thisFileNode)
        Next
        Return thisDirNode
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多