ASP.NET页脚控件:在不同文件夹中使用时链接断开

时间:2010-01-28 16:05:12

标签: asp.net user-controls hyperlink

我有一个ASP .NET网站,我有一个index.aspx页面和3个文件夹以及it.ie;我的Root有index.aspx,FolderA,FolderB,然后是FolderCommon(这3个是文件夹)。

我在FolderA和FolderB.FolderCommon中有几个asp页面存储js文件,CSS文件和公共代码等....

我有一个名为pageFooter的用户控件,在其中我保留了我页面的所有页脚链接。现在我的问题是当我在索引页面中使用相同的页脚用户控件时,它在根文件夹中可用,它不会为其他页面工作,因为路径不同。那么如何重新设计页脚用户控件,以便链接在所有页面中保持一致,而不管文件夹结构或它们出现的位置。

注意:我不想提供href属性的完整链接(例如:http://sitename/folderA/fielname.aspx

任何想法???

5 个答案:

答案 0 :(得分:3)

如果您正在执行asp:Hyperlink,请始终以这种方式设置链接:

NavigateUrl="~/index.aspx"
NavigateURL="~/Folder/Default.aspx"

〜基本上意味着“根”

如果您正在进行常规<a href="">,那么您需要根据文件的位置提供链接的相对路径。

因此,如果您在folderA中,并且想要引用根。

<a href="../index.aspx"></a>

答案 1 :(得分:0)

我们堆叠着同样的问题。我们使用绝对URL和以下实用程序将已存在的'〜'转换为正确的路径

public static class UrlUtils
{

    /// <summary>
    ///This method returns the correct relative path when installing 
    /// the portal on a root web site instead of virtual directory
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    public static string GetApplicationPath(HttpRequest request)
    {
        string path = string.Empty;
        if (request.ApplicationPath != "/")
            path = request.ApplicationPath;
        return path;
    }

    /// <summary>
    /// Changes leading '~' to absolute URL including lead address e.g. http[s]://.... using
    /// <see cref="HttpContext.Current" />.
    /// </summary>
    /// <param name="url">Relative or absolute URL.</param>
    /// <returns>Absolute URL.</returns>
    public static string ResolveAbsoluteUrl(string url)
    {
        if (url.StartsWith("~"))
        {
            HttpRequest request = HttpContext.Current.Request;

            string _BaseUrl = new Uri(request.Url.ToString()).GetLeftPart(UriPartial.Authority);
            string baseUrl;
            baseUrl = _BaseUrl + GetApplicationPath(request);
            return baseUrl + url.Substring(1);
        }
        return url;
    }

答案 2 :(得分:0)

这(可能)你现在拥有的......

<a href="yourpage.aspx">Link</a>

您可以尝试:

<a href="/yourpage.aspx">Link</a>

你应该发现斜线有所不同!

答案 3 :(得分:0)

我不确定问题的确切性质,但您是否尝试过使用根相对路径?类似的东西:

"~/Folder/{control or page}"

您的代码示例会有所帮助。

答案 4 :(得分:0)

您可以查看控件所在页面的网址吗?

Dim currentURL as string = HttpContext.Current.Request.Url.ToString

知道了网址后,您应该知道要显示的链接。