我们在调试aspx文件时,经常有时想转到自己想要的一个页面看看,此时若Session过期重新登陆时要重输url或者要在菜单里寻找。往往我们只关系某几个模块。文件浏览或许可以发挥一些作用。 Steve Sharrock在http://aspalliance.com/发表了[TreeView - Programming an Explorer-style Site View]一文(http://aspalliance.com/125),但正如user comments所言,所提出的方法在实现上有一定的缺陷。本文基于Infragistics的NetAdvantage(4.2)控件提出一种设计方法。该方法可直接推广到Microsoft的TreeView控件上。算法比较简单,直接给出代码示例。
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Infragistics.WebUI.Shared;
namespace Company.FolderBrowser.TreeView


{

/**//// <summary>
/// Summary description for DocTree.
/// aspx文件浏览器
/// </summary>
public class DocTree : System.Web.UI.Page

{
private const string imgurl = "./Image/";
private int iDomainLen;
protected Infragistics.WebUI.UltraWebNavigator.UltraWebTree UltraWebTree1;
string strDomain;
public DocTree()

{
Page.Init += new System.EventHandler(Page_Init);
}
private void Page_Load(object sender, System.EventArgs e)

{
if ( ! this.IsPostBack )

{
//生成根节点
Infragistics.WebUI.UltraWebNavigator.Node objNode;
objNode = new Infragistics.WebUI.UltraWebNavigator.Node();
objNode.ImageUrl = imgurl + "folder.gif";
objNode.Text = "Root";
objNode.Tag = "folder";
UltraWebTree1.Nodes.Add(objNode);
//递归获取目录和文件
GetFolders(MapPath("~/./" ),UltraWebTree1.Nodes[0].Nodes );
UltraWebTree1.Expandable = true;
}
}
private void Page_Init(object sender, EventArgs e)

{
InitializeComponent();
//iDomainLen = Server.MapPath("").Length;
//因为当前文件在2级目录,所以域长度获取去上一级目录长度
//相应地,取域名时也要截掉当前目录
iDomainLen = Server.MapPath("../").Length;
string strURL = Request.Url.ToString();
try

{
strURL = strURL.Substring(0,strURL.LastIndexOf('/'));
}
catch

{
strURL = Request.Url.ToString();
}
int iFootindex = strURL.LastIndexOf('/');
if (iFootindex>0)

{
strDomain = strURL.Substring(0,iFootindex)+"/";
}
else

{
strDomain = strURL;
}
}

/**//// <summary>
/// 递归获取文件夹和相关文件,并填充到节点
/// </summary>
/// <param name="path">目录路径</param>
/// <param name="nodes">填充节点</param>
private void GetFolders(string path, Infragistics.WebUI.UltraWebNavigator.Nodes nodes)

{
//获取子目录
string[] dirs = Directory.GetDirectories( path );
foreach( string p in dirs )

{
string dp = p.Substring(path.Length);
if ( dp.StartsWith( "_v" ) )
continue; //排除以_v开头的frontpage文件夹
nodes.Add(Node("",p.Substring(path.Length),"folder" ) );
}
//获取目录内文件,过滤非aspx文件
string[] files = Directory.GetFiles(path, "*.aspx" );
foreach( string p in files )

{
nodes.Add( Node( p, p.Substring(path.Length ), "file" ) );
}
//增加子文件夹及其文件(递归)
for( int i = 0; i < nodes.Count; i++ )

{
if ( nodes[i].Tag.ToString() == "folder" )

{
GetFolders(dirs[i] + "\", nodes[i].Nodes );
}
}
}

/**//// <summary>
/// 创建节点
/// </summary>
/// <param name="path">路径</param>
/// <param name="text">显示文本</param>
/// <param name="type">标记类型</param>
/// <returns>节点</returns>
private Infragistics.WebUI.UltraWebNavigator.Node Node(string path, string text, string type )

{
Infragistics.WebUI.UltraWebNavigator.Node n = new Infragistics.WebUI.UltraWebNavigator.Node();
n.Tag = type;
n.Text = text;
n.ImageUrl = imgurl + "folder.gif";
n.SelectedImageUrl = imgurl + "folderopen.gif";
if ( type == "file" )

{
string nav = strDomain + path.Substring(iDomainLen);
nav.Replace( '\', '/' );
n.TargetUrl = nav;
n.ImageUrl = imgurl+"file.gif";
n.SelectedImageUrl = imgurl+"file.gif";
n.TargetFrame = "doc";
}
return n;
}

Web Form Designer generated code#region Web Form Designer generated code

/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()

{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
调用时,在项目中增加一个文件夹“FolderBrowser”,加入本文件和图片文件夹,将本文件设为主页即可!
调用时,在项目中增加一个文件夹“FolderBrowser”,加入本文件和图片文件夹,将本文件设为主页即可!
浙公网安备 33010602011771号