相对于当前URL的超链接不是用户控件的路径

Kyl*_*yle 6 asp.net

我的网站上有一个页面,为了这个例子,我们可以说http://myhost/Pages/Default.aspx.在Default.aspx上,我有一个名为MyControl.ascx的用户控件,它位于/Controls/MyControl.ascx中.所以树看起来像这样

    • 网页
      • Default.aspx的
    • 控制
      • MyControl.ascx

每当我在MyControl.ascx上放置HyperLink控件并指定NavigateUrl时,此路径都相对于控件而不是页面的URL.因此,例如,如果在NavigateUrl中我指定了"AboutMe.aspx",则URL将呈现为http://myhost/Controls/AboutMe.aspx而不是http://myhost/Pages/AboutMe.aspx.我有什么方法可以使这个相对于页面URL?我在这里尝试了解决方案:来自ASP.NET用户控件NavigateUrl的相对路径,但它对我不起作用.

编辑

为了澄清,我希望这是足够通用的,以便如果我不知道路径是什么,解决方案将起作用.所以我真的不想在NavigateUrl中编码"〜/ Pages/Default.aspx"

Kel*_*sey 6

你有很多选择:

  1. 您可以使用~运算符对Url进行硬编码,该运算符为您提供根,然后从那里定义它,如:~/Pages/AboutMe.aspx.请记住,~只有服务器控件和服务器代码才能识别操作员.

  2. 您也可以使用它..来到达您想要的位置,因为它将导航回文件夹结构,如:../Pages/AboutMe.aspx

  3. 您可以创建一个帮助方法,将有效的根返回到Pages文件夹,Images,Javascript等...

  4. HttpRequest.ApplicationPath会得到你可以用它来构建关闭服务器上的虚拟应用程序的根路径.

有关Pathing选项的更多信息,请阅读MSDN上的这篇文章:

ASP.NET Web项目路径

编辑:根据您对问题的编辑,您应该通过属性将相对URL传递给您的用户控件.让使用该控件的页面定义它将需要的资源的相对路径.