Как нажать на treeviewnode, чтобы скачать файл

Я хочу вывести список файлов в древовидной структуре, и если я нажму на триод (файл), этот файл будет загружен:

<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);
        }
    }
}

Как я могу изменить это так, что я нажимаю на триоде, файл на триоде будет загружен.

Заранее спасибо.

2 ответа

Решение

Если ваше приложение является приложением для внутренней сети, это может работать:

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

Если это не приложение для интрасети, вы можете подключиться к событию selectedNodeChanged в древовидном представлении и использовать потоковый файл для потоковой передачи файла клиенту. Но вам, скорее всего, придется указать тип файла MIME в зависимости от того, какие файлы вы планируете отправить.

Я бы использовал jquery, чтобы превратить узлы дерева в ссылки. Получив ссылку, перехватите событие javascript onclick и в этом случае добавьте iframe на страницу с адресом файла. Это приведет к загрузке файла.

Другие вопросы по тегам