Как нажать на 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 на страницу с адресом файла. Это приведет к загрузке файла.