DavidJGu's Blog

       尼采说,宁可追求虚无也不能无所追求!  Keeping is harder than winning
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一种站点aspx文件浏览器设计

Posted on 2004-09-17 19:54  Let's DotNet  阅读(1465)  评论(2编辑  收藏  举报
我们在调试aspx文件时,经常有时想转到自己想要的一个页面看看,此时若Session过期重新登陆时要重输url或者要在菜单里寻找。往往我们只关系某几个模块。文件浏览或许可以发挥一些作用。 Steve Sharrockhttp://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 );
            
foreachstring 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" );
            
foreachstring p in files )
            
{
                nodes.Add( Node( p, p.Substring(path.Length ), 
"file" ) );
            }
            

            
//增加子文件夹及其文件(递归)
            forint 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
    }

}


调用时,在项目中增加一个文件夹“FolderBrowser”,加入本文件和图片文件夹,将本文件设为主页即可!