【问题标题】:Why asp:HyperLink.NagigateUrl in user control, placed in sub-folder, contains this sub-folder?为什么用户控件中的asp:HyperLink.NavigateUrl,放在子文件夹中,包含这个子文件夹?
【发布时间】:2011-01-12 09:21:30
【问题描述】:

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

为什么会这样?

【问题讨论】:

    标签: .net asp.net hyperlink navigateurl


    【解决方案1】:

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

    来自 MSDN 的说明:

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

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

    【讨论】:

    • 我可以从位于子文件夹中的 гыук сщтекщд 代码调用此方法吗? IE。 this.Page.ResolveClientUrl() where this : UserControl
    • 那么奇怪为什么它对我不起作用.. urlSearch.NavigateUrl = this.Page.ResolveClientUrl("?search=true") 使 url 的地址仍然相同 - localhost/Approve/?search=true。也许我做错了什么?
    • @abatishchev - 如果此链接始终与页面相关,请不要使用控件,只需 &lt;a href="?search=true"&gt;Link Text&lt;/a&gt;
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 2021-06-28
      • 2012-07-24
      • 2018-01-02
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      相关资源
      最近更新 更多