~/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
为什么会这样?
答案 0 :(得分:2)
如果您在路径的开头没有/或〜,则认为它相对于CURRENT位置。
从用户控件中,当前位置是控件的位置。
答案 1 :(得分:2)
链接是相对于用户控件目录解析的,它们实际上是在内部调用ResolveClientUrl();
,所以你会看到同样的行为。
MSDN的说明:
此方法返回的URL与包含实例化控件的源文件的文件夹相关。继承此属性的控件(如UserControl和MasterPage)将返回相对于控件的完全限定URL。
在代码隐藏中使用Page.ResolveClientUrl()
解析网址将解决问题。