繁体   English   中英

没有ASP.NET页面的ResolveUrl

[英]ResolveUrl without an ASP.NET Page

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

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

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

我是否需要使用自定义功能,例如此处显示的功能

或者有没有办法获得Page使用的底层函数。

尝试从处理程序获取页面并使用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

关于SO的这个问题( ASP.Net:在共享/静态函数中使用System.Web.UI.Control.ResolveUrl() )看起来很有帮助......基本上,你可以使用System.Web下的VirtualPathUtility类。命名空间。 这个问题有一个额外的答案,它说要小心QueryString参数,但也提供了解决方案。

与此同时,Rick Strahl的代码非常整洁!

使用类似这样的东西 - Controls是应用程序中的文件夹名称,myController是控制器名称。 要创建和实例并加载控制器,您可以通过以下方式执行此操作:

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM