[英]Why asp:HyperLink.NagigateUrl in user control, placed in sub-folder, contains this sub-folder?
~/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
為什么會發生?
如果您在路徑的開頭沒有/或〜,則將其視為相對於CURRENT位置。
從用戶控件來看,當前位置是控件的位置。
鏈接是相對於用戶控件目錄解析的,它們實際上調用ResolveClientUrl();
在內部,所以您會看到相同的行為。
來自MSDN的說明:
此方法返回的URL相對於包含在其中實例化控件的源文件的文件夾。 繼承此屬性的控件(例如UserControl和MasterPage)將返回相對於該控件的完全限定的URL。
在后面的代碼中使用Page.ResolveClientUrl()
解析URL將解決此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.