Элемент управления ASP.NET: разрыв ссылок при использовании разных папок - PullRequest
0 голосов
/ 28 января 2010

У меня есть веб-сайт ASP .NET, на котором у меня есть страница index.aspx и 3 папки вместе с it.ie; у моего корня есть index.aspx, FolderA, FolderB и затем FolderCommon (эти 3 папки).

У меня есть несколько страниц asp в FolderA и FolderB. FolderCommon хранит js-файлы, CSS-файлы и общий код и т. Д. ....

У меня есть пользовательский элемент управления с именем pageFooter, внутри которого я сохраняю все ссылки нижнего колонтитула моей страницы. Теперь моя проблема заключается в том, что при использовании того же пользовательского элемента управления нижнего колонтитула на моей странице индекса, который доступен в корневой папке, он не будет работать для других страниц, потому что путь другой. Как я могу изменить дизайн пользовательского элемента нижнего колонтитула, чтобы ссылки были согласованными на всех страницах, независимо от структуры папок или места, где они присутствуют.

Примечание: я не хочу давать полную ссылку на свойство href (например: http://sitename/folderA/fielname.aspx)

Есть мысли ???

Ответы [ 5 ]

3 голосов
/ 28 января 2010

Если вы делаете asp:Hyperlink, всегда устанавливайте ссылки следующим образом:

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

~ в основном означает "корень"

Если вы делаете регулярно <a href="">, вам нужно указать относительный путь к ссылке, где бы файл ни находился.

Так что, если вы находитесь в папке A и хотите сослаться на корень.

<a href="../index.aspx"></a>
0 голосов
/ 28 января 2010

Не могли бы вы проверить URL страницы, на которой находится элемент управления?

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

Когда вы знаете URL, вы должны знать, какие ссылки показывать.

0 голосов
/ 28 января 2010

Я не уверен в точном характере вашей проблемы, но вы пытались использовать корневые пути? Что-то вроде:

"~/Folder/{control or page}"

Пример вашего кода будет полезен.

0 голосов
/ 28 января 2010

Это (вероятно) то, что у вас сейчас ...

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

Вы можете попробовать:

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

И вы должны найти, что косая черта имеет все значение!

0 голосов
/ 28 января 2010

Мы складываемся с той же проблемой. Мы использовали абсолютный 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...