2009-07-11 35 views
0

我想设置一个页面,将允许用户浏览Web服务器上的文件目录。树视图文件到Web地址而不是目录地址

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

当设置节点导航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 

回答

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 
+0

可不可以给我这是如何工作的例子吗? – 2009-07-12 15:35:37

相关问题