组件开发之asp.net 2.0获取设计时页面的虚拟路径[DesignTime page's virtual path]

    如果你搞组件开发,为了实现设计时支持,你可能会需要取得当前页面[Control.Page]的虚拟路径.这在VS2003中可以比较容易做到.直接使用Page.TemplateSourceDirectory就可以了,可是在Vs2005中就不那么简单了,这个属性永远返回空值.我想可能是使用Asp.net Development Server的后果.(不过我也没有使用IIS确认一下,有那位朋友试验过请搞诉我.)
    万般无奈之中,我只好使用VS的组件调试功能,在VS的设计时服务中查找,经过一番努力,终于找到了它,于是我编程用反射成功取得了页面的虚拟路径,它的形式是这样的"~/myapp/xtgl/user.aspx".我想搞组件开发的朋友们很可能回用到,所以和朋友们分享一下.如果哪位有更好地方法,请一定不吝赐教.
/// <summary>
        
/// 用反射提取当前Page的虚拟路径
        
/// </summary>
        
/// <returns></returns>
        private string GetDesignTimePagePath()
        {
            
string path = "not found";
            
            FieldInfo fi, fu;
            PropertyInfo pi;
            
            fi 
= Page.Site.Container.GetType().GetField("_loader", BindingFlags.NonPublic | BindingFlags.Instance);
            
if (fi != null)
            {
                
object loader = fi.GetValue(Page.Site.Container);
                pi 
= loader.GetType().GetProperty("FileInfo");
                
if (pi != null)
                {
                    
object ff = pi.GetValue(loader, null);
                    fu 
= ff.GetType().GetField("_url", BindingFlags.NonPublic | BindingFlags.Instance);
                    
if (fu != null)
                    {
                        
object v = fu.GetValue(ff);
                        path 
= (string)v;
                    }
                }
            }
            
return path;
        }
posted @ 2006-04-15 18:06 大剑师 阅读(1916) 评论(5)  编辑 收藏 网摘 所属分类: ASP.NET 控件开发

  回复  引用  查看    
#2楼[楼主]2006-04-16 15:16 | 大剑师      
@天天
看了你的文章,很详细,不错,不过和我说得没有关系,用到的人自然明白

  回复  引用  查看    
#3楼2006-04-16 22:51 | mapserver      
组件是贴在Component Designer上的,如果是Asp.net的控件呢?哈。
  回复  引用  查看    
#4楼[楼主]2006-04-17 01:10 | 大剑师      
@mapserver
不太明白你的意思,我说的就是ASP.net的控件(请看标题), 这个需要就是拿我的控件放到页面上设计程序时发生的.

  回复  引用  查看    
#5楼2007-03-02 15:15 | kagar      
正是我所要,谢谢



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 376066




相关文章:

相关链接: