Относительные пути ASP.NET MVC - PullRequest
97 голосов
/ 25 ноября 2008

В моих приложениях мне часто приходится использовать относительные пути. Например, когда я ссылаюсь на JQuery, я обычно делаю так:

<script type="text/javascript" src="../Scripts/jquery-1.2.6.js"></script>

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

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

<script type="text/javascript" src="/Scripts/jquery-1.2.6.js"></script>

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

Так какое же лучшее решение?

Edit:

Так как этот вопрос все еще получает представления и ответы, я подумал, что было бы разумно обновить его, чтобы отметить, что начиная с Razor V2, поддержка корневых ссылок встроена, поэтому вы можете использовать

<img src="~/Content/MyImage.jpg">

без какого-либо серверного синтаксиса, и механизм просмотра автоматически заменяет ~ / на любой текущий корень сайта.

Ответы [ 11 ]

1 голос
/ 01 июля 2009

Как и Крис, я действительно не могу вставлять раздутые серверные теги в мою чистую разметку просто для того, чтобы указывать глупому взгляду от корня вверх. Это должно быть очень простой, разумной вещью, о которой нужно просить. Но я также ненавижу мысль о том, что мне приходится прилагать усилия для написания каких-либо пользовательских классов C #, чтобы делать такую ​​простую вещь. Почему я должен это делать? Какая трата времени.

Для меня я просто пошел на компромисс в отношении «совершенства» и жестко закодировал имя корневого пути виртуального каталога в своих путевых ссылках. Так вот так:

<script type="text/javascript" src="/MyProject/Scripts/jquery-1.2.6.js"></script>

Для разрешения URL-адреса не требуется обработка на стороне сервера или код C #, что является наилучшим для производительности, хотя я знаю, что в любом случае оно будет незначительным. И никакой раздутой уродливой серверной неразберихи в моей хорошей чистой разметке.

Мне просто придется жить, зная, что это жестко запрограммировано, и его нужно будет удалить, когда объект перейдет в соответствующий домен вместо http://MyDevServer/MyProject/

Приветствия

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