2010-02-02 65 views
0

~/Folder1/UserControl1.ascx:为什么ASP:HyperLink.NagigateUrl在用户控件放置在子文件夹中包含此子文件夹?

<%@ Control Language="C#" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %> 
<asp:HyperLink runat="server" NavigateUrl="?foo=bar">HyperLink1</asp:HyperLink> 

~/UserControl2.ascx:

<%@ Control Language="C#"CodeBehind="WebUserControl2.ascx.cs" Inherits="WebApplication1.WebUserControl2" %> 
<asp:HyperLink runat="server" NavigateUrl="?foo=bar">HyperLink2</asp:HyperLink> 

结果:

http://localhost/Folder1/?foo=bar 

http://localhost/?foo=bar 

它为什么会发生?

回答

2

当你没有一个/或〜在路径的开始,它被认为是相对于当前位置。

从用户控制,当前位置是在控制的位置。

2

的联系是相对于用户控制的目录决心,他们居然叫ResolveClientUrl();内部,所以你看这个相同的行为。从MSDN

描述:

通过此方法返回的URL是相对于包含在其中控制被实例化的源文件的文件夹。继承此属性的控件(如UserControl和MasterPage)将返回相对于该控件的完全限定的URL。

在代码隐藏中解决url与Page.ResolveClientUrl()将解决问题。

+0

我可以打电话从位于子文件夹гыуксщтекщд代码这种方法吗?即this.Page.ResolveClientUrl()这里:UserControl – abatishchev 2010-02-04 12:55:36

+0

@abatishchev - 是的,这应该工作得很好 – 2010-02-04 13:08:55

+0

然后这很奇怪,为什么它不适用于我.. urlSearch.NavigateUrl = this.Page.ResolveClientUrl(“?search = true “)使url的地址仍然相同 - http:// localhost/Approve /?search = true。也许我做错了什么? – abatishchev 2010-02-04 13:13:06

相关问题