как нажать на treeviewnode, чтобы скачать файл - PullRequest
1 голос
/ 14 февраля 2012

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

<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 ]

2 голосов
/ 14 февраля 2012

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

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

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

0 голосов
/ 14 февраля 2012

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

...