为什么asp:用户控件中的HyperLink.NagigateUrl放在子文件夹中,包含这个子文件夹?

时间:2010-02-02 22:19:34

标签: .net asp.net hyperlink navigateurl

~/Folder1/UserControl1.ascx:

<%@ 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 个答案:

答案 0 :(得分:2)

如果您在路径的开头没有/或〜,则认为它相对于CURRENT位置。

从用户控件中,当前位置是控件的位置。

答案 1 :(得分:2)

链接是相对于用户控件目录解析的,它们实际上是在内部调用ResolveClientUrl();,所以你会看到同样的行为。

MSDN的说明:

  

此方法返回的URL与包含实例化控件的源文件的文件夹相关。继承此属性的控件(如UserControl和MasterPage)将返回相对于控件的完全限定URL。

在代码隐藏中使用Page.ResolveClientUrl()解析网址将解决问题。