获取当前正在ASP.net中处理的文件

时间:2010-09-24 21:20:45

标签: c# asp.net

我有一个要求,我想跟踪.net运行时正在处理的文件。我的意思是如果它正在处理usercontrol x.ascx然后它应该返回它的整个路径,如果它正在处理usercontrol y.ascx它应该返回它。

有一些候选属性。

Request.AppRelativeCurrentExecutionFilePath

TemplateControl.AppRelativeVirtualPath. 

有人可以帮我这个,还是有任何其他财产可以给我这条路。

1 个答案:

答案 0 :(得分:2)

Request.AppRelativeCurrentExecutionFilePath应该做你需要的。它会产生意想不到的结果吗?

更新

您应该能够通过枚举当前页面处理程序的Controls集合来检索当前正在执行的任何UserControl。假设有一个外部上下文,这是一个应该有效的例子:

public static string[] GetCurrentUserControlPaths() {
    if(HttpContext.Current == null) return new string[0];
    if(!(HttpContext.Current.Handler is Page)) return new string[0];

    var page = (HttpContext.Current.Handler as Page);
    var paths = ControlAggregator(page, c => c is UserControl).Cast<UserControl>().Select(uc => uc.AppRelativeVirtualPath);

    if(page.Master != null) {
        paths.Concat(ControlAggregator(page.Master, c => c is UserControl).Cast<UserControl>().Select(uc => uc.AppRelativeVirtualPath));
    }

    return paths.ToArray();
}

public static Control[] ControlAggregator(this Control control, Func<Control, bool> selector) {
    var list = new List<Control>();

    if (selector(control)) {
        list.Add(control);
    }

    foreach(Control child in control.Controls) {
        list.AddRange(ControlAggregator(child, selector));
    }

    return list.ToArray();
}