【问题标题】:ResolveUrl without an ASP.NET Page没有 ASP.NET 页面的 ResolveUrl
【发布时间】:2011-02-04 00:31:44
【问题描述】:

我正在寻找一种方法来解析相对 url,就像使用页面或控件实例 (MSDN Docs) 一样,例如:

Page.ResolveUrl("~/common/Error.aspx");

...但是当我只有一个可用的 HttpContext 时,例如当我在 HttpHandler 中时。

我是否需要使用自定义函数,例如看到的here

或者有没有办法获得页面使用的底层功能。

【问题讨论】:

    标签: c# .net asp.net resolveurl


    【解决方案1】:

    尝试从处理程序中获取页面并使用ResolveUrl,或者创建一个Control对象...

    (HttpContext.Current.Handler as Page).ResolveUrl("~/virtualpath");
    

    或使用VirtualPathUtility.ToAppRelative(string)VirtualPathUtility.ToAbsolute(string)

    例如:

    System.Web.VirtualPathUtility.ToAbsolute("~/Styles/Contoso.xslt");
    

    返回

    /WebSite/Styles/Contoso.xslt
    

    【讨论】:

      【解决方案2】:

      关于 SO (ASP.Net: Using System.Web.UI.Control.ResolveUrl() in a shared/static function) 的这个问题看起来很有帮助...基本上,您可以使用 System.Web 命名空间下的 VirtualPathUtility 类。该问题有一个额外的答案,说要小心 QueryString 参数,但也提供了解决方案。

      同时,Rick Strahl 的代码非常简洁!

      【讨论】:

      • 哪些好的模式和实践System.Web.VirtualPathUtilityHttpContext.Current.HandlerRick Strahl's code ?
      【解决方案3】:

      使用这样的东西 - Controls 是应用程序中的文件夹名称,而 myController 是控制器名称。要创建、实例化和加载控制器,您可以这样做:

      Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2017-06-29
        • 2015-09-09
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多