Относительные и абсолютные пути на ASP.NET/IIS - PullRequest
5 голосов
/ 06 октября 2011

Я прочитал много статей об относительных / абсолютных путях, но все еще не могу решить эту проблему.

Следующий код взят со страницы ASP.NET Master:

<li><a>Reports</a>
    <ul>
        <li>
            <a href="/Reports/One.aspx">One</a>
        </li>
        <li>
            <a href="~/Reports/Two.aspx">Two</a>
        </li>
    </ul>
</li>

(Обратите внимание, что одна ссылка имеет ~, а другая - нет.)

При запуске сайта первая ссылка указывает на http://server/Reports/One.aspx, а вторая ссылка http://server/company/project/Reports/~/Reports/Two.aspx.

Как добраться до корня моего проекта ASP.NET, не игнорируя при этом все виртуальные каталоги, установленные в IIS?

Ответы [ 4 ]

13 голосов
/ 06 октября 2011

Добавить runat="server" атрибут к тегу привязки. Вы не можете использовать оператор ~ root с тегами HTML. Только серверные элементы управления (Html ​​или Web) могут использовать его.

<a runat="server" href="~/Reports/Two.aspx">Two</a>
12 голосов
/ 06 октября 2011

Используйте Page.ResovleUrl для всех ваших файлов, если вы не хотите, чтобы они были серверными элементами управления с сгенерированными идентификаторами:

<a href='<%= Page.ResolveUrl("~/Reports/Two.aspx")%>'>Two</a>
6 голосов
/ 06 октября 2011

Относительный путь относится к текущему ресурсу, поэтому если вы просматриваете

http://yourhost/app/default.aspx

, относительный путь reports/one.aspx будет http://yourhost/app/reports/one.aspx.Обратите внимание на отсутствие ведущего / в относительном пути.Вот что делает его относительным.

Абсолютный путь, как вы, вероятно, можете догадаться, начинается с / и использует имя хоста текущего ресурса, так что http://yourhost/reports/one.aspx.

~ это красная сельдь.Это .NET -только дополнение, используемое различными частями ASP.NET для обоснования вашего пути от текущего корня приложения.Таким образом, если корнем вашего приложения был http://yourhost/app, вы просматривали http://yourhost/app/views/default.aspx, и вы спросили .NET для пути ~/reports/one.aspx', you would be givenhttp://yourhost/app/reports/one.aspx`.

~ не используется HTML, IIS или URL, поэтомуесли ваш браузер его увидит, он просто будет использовать его как есть.

Примечание : некоторые серверы Unix могут использовать ~ для сопоставления в домашнем каталоге пользователя, но это только усложняет ситуацию.

1 голос
/ 06 октября 2011

Пожалуйста, прочитайте Что-то есть в "Путях" для начинающих ASP.NET .Это даст полное представление о «путях» в приложении ASP.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...