万般无奈之中,我只好使用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;
}
/// 用反射提取当前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;
}