为什么用户控件中的asp:HyperLink.NagigateUrl,放置在子文件夹中,包含这个子文件夹?
~/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
为什么会发生这种情况?
~/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>
Result:
http://localhost/Folder1/?foo=bar
http://localhost/?foo=bar
Why does it happen?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当路径开头没有 / 或 ~ 时,它被视为相对于当前位置。
对于用户控件,当前位置是控件的位置。
WHen you do not have a / or ~ at the beginning of the path, it is considered relative to the CURRENT position.
From a user control, current position is the position of the control.
这些链接是相对于用户控件的目录进行解析的,它们实际上调用
ResolveClientUrl();
内部,因此您会看到相同的行为。来自MSDN的描述:
在代码隐藏中使用
Page.ResolveClientUrl()
解析 url 将解决该问题。The links are resolve relative to the directory of the user control, they actually call
ResolveClientUrl();
internally, so you see this same behavior.Description from MSDN:
Resolving the urls with
Page.ResolveClientUrl()
in the code-behind will solve the problem.