2013-03-12 106 views
4

我正在维护一个ASP.NET Web窗体网站(我的意思是网站,它不是一个web应用程序),并且一些静态链接被破坏,因为它们正在托管它与一个虚拟目录。获取包含虚拟目录的URL?

http://www.somewhere.com/MyApp 

所以,我开始寻找一种方法来获得绝对URL给出某个页面的虚拟路径。而且我发现,提到你可以采取这样的链接的文章:

<a href="/ContactUs.aspx">Contact Us</a> 

,做这样的事情:

<a href="<%= System.Web.VirtualPathUtility.ToAbsolute("/ContactUs.aspx") %>">Contact Us</a> 

,但是这还没有针对ASP.NET开发本地工作(即服务器),因为我的本地路径可能是这样的:

http://localhost:7766/MyApp 

而是由VirtualPathUtility产生的路径是这样的:

http://localhost:7766/ContactUs.aspx 

所以,我决定将它部署到我的本地IIS实例,看看它是如何工作。结果是一样的。本地IIS路径为:

http://localhost/MyApp 

但路径与我们联系页面:

http://localhost/ContactUs.aspx 

在最后一个顺利的相处,没有在应用程序看起来一个链接像这样:

<asp:HyperLink id="ContactUsLink" 
    runat="server" 
    Enabled="true" 
    NavigateUrl="/ContactUs.aspx" 
    Text="Contact Us"> 
</asp:HyperLink> 

我之所以说这是一个混乱的原因是因为我知道内联代码(与上述示例类似)不适用于服务器控件。实际上,它抛出一个编译器错误:

Server tags cannot contain <% ... %> constructs.


所以看起来我清楚地向下移动了错误的道路,我需要一些帮助。我期待着你的回答。

回答

10

尝试:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath 
2

你应该前缀你的地址了〜。所以“〜/ Contact.aspx”在任何runat =服务器控件上。这不适用于标准标签。您可以将runat = server添加到常规标记以使其成为服务器控件。

运行时将会看到〜并使其相对于您正在运行的内容。

<asp:HyperLink id="ContactUsLink" 
    runat="server" 
    Enabled="true" 
    NavigateUrl="~/ContactUs.aspx" 
    Text="Contact Us"> 
</asp:HyperLink> 
2

可以使用了〜会正确解决您的网址,因此,超链接控制变成这样:

<asp:HyperLink id="ContactUsLink" 
    runat="server" 
    Enabled="true" 
    NavigateUrl="~/ContactUs.aspx" 
    Text="Contact Us"> 
</asp:HyperLink> 

的〜符号将始终解析为您的应用程序,它的根目录我会考虑你的虚拟路径。上述解决方案也将摆脱对服务器标签的需求,所以应该解决您的问题。

如果您想直接在代码中获取虚拟目录路径(即URL的MyApp部分),您可以使用HttpContext.Current.Request.ApplicationPath来为您返回虚拟路径。然后你可以使用它来派生你的URL。

+0

〜是必不可少的! – stannius 2017-04-25 20:12:36

0
window.location.protocol + "/" +(window.location.host + "/" + window.location.pathname);