0

~/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

为什么会这样?

4

2 回答 2

2

当路径的开头没有 / 或 ~ 时,它被认为是相对于 CURRENT 位置。

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

于 2010-02-02T22:23:32.320 回答
2

这些链接是相对于用户控件的目录进行解析的,它们实际上是在ResolveClientUrl();内部调用的,因此您会看到相同的行为。

来自 MSDN 的描述:

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

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

于 2010-02-02T22:25:11.633 回答