如何单击treeviewnode下载文件

时间:2012-02-14 00:00:06

标签: asp.net treeview treenode

我想在树视图中列出文件,如果我点击treenode(文件),该文件将被下载:

<asp:TreeView Id="MyTree" 
                      PathSeparator = "|"
                      OnTreeNodePopulate="PopulateNode"
                      ExpandDepth="0"
                      runat="server" ImageSet="XPDirectoryListing" NodeIndent="15">

            <SelectedNodeStyle BackColor="#B5B5B5"></SelectedNodeStyle>
            <NodeStyle VerticalPadding="2" Font-Names="Tahoma" Font-Size="8pt" HorizontalPadding="2" ForeColor="#000000"></NodeStyle>
            <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA"></HoverNodeStyle>

            <Nodes>
                <asp:TreeNode Text="Demos" PopulateOnDemand="True" Value="Demos" />
            </Nodes>

        </asp:TreeView>

代码隐藏:

public partial class DirectoryListing : System.Web.UI.Page
{
    protected void PopulateNode(Object source, TreeNodeEventArgs e)
    {
        TreeNode node = e.Node;

        if (e.Node.Value == "Demos")
        {
            e.Node.Value = Server.MapPath("~/");
        }

        String[] dirs = Directory.GetDirectories(node.Value);

        // Enumerate directories
        foreach (String dir in dirs)
        {
            TreeNode newNode = new TreeNode(Path.GetFileName(dir), dir);

            if (Directory.GetFiles(dir).Length > 0 || Directory.GetDirectories(dir).Length > 0)
            {
                newNode.PopulateOnDemand = true;
            }

            node.ChildNodes.Add(newNode);
        }

        // Enumerate files
        String[] files = Directory.GetFiles(node.Value);

        foreach (String file in files)
        {
            TreeNode newNode = new TreeNode(Path.GetFileName(file), file);
            node.ChildNodes.Add(newNode);
        }
    }
}

如何更改它以便点击treenode,将下载treenode上的文件。

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果您的应用程序是Intranet应用程序,那么这可能有效:

TreeNode newNode = new TreeNode(Path.GetFileName(file), file);
            newNode.SelectAction = TreeNodeSelectAction.Select;
            newNode.NavigateUrl = Path.GetFullPath(file);
            node.ChildNodes.Add(newNode);

如果它不是Intranet应用程序,您可以挂钩树视图上的selectedNodeChanged事件,并使用文件流媒体将文件流式传输到客户端。但是,您很可能必须根据计划发送的文件指定文件的MIME类型。

答案 1 :(得分:0)

我会使用jquery将树节点转换为链接。一旦你获得链接捕获onclick javascript事件,并在该事件中添加一个iframe到具有该文件的地址的页面。这将导致文件被下载。