我想在树视图中列出文件,如果我点击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上的文件。
提前致谢。
答案 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到具有该文件的地址的页面。这将导致文件被下载。