2009-06-04 1 views
6

Я создал проект ASP.net MVC по умолчанию. В мастер-странице я следующее в верхнихКак включить js-файлы в asp.net MVC и иметь допустимый путь по всем маршрутам

<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
</head> 

тогда мне нужно добавить файл JavaScript и добавил строку следующего путем перетаскивания файла из проводника решения на страницу:

<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
</head> 

Когда я получить доступ к сайту и посмотреть на HTML из браузера Я вижу это:

<head><title> 

    Index 

</title><link href="Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
</head> 

файл CSS относительный путь был установлен, но файл JS нет. Сайт будет развернут в другую папку на сервере, чем тот корень, который я получаю в своем окне разработки.

Есть ли правильный способ сделать это?

ответ

16

Используйте Url Helper:

<script type="text/javascript" src="<%=Url.Content("~/Content/script/MyFile.js")%>"></script> 

Надежда, что помогает

+0

Это устраняет проблему с установкой сайта в подкаталоге, поскольку ~ заменяется на путь к корню сайта. Но проблема в том, что когда я добираюсь до корня, файл js находится в папке Scripts под корнем, а не ../../Scripts остается. Поскольку MVC будет перенаправляться в разные вложенные папки, сценарий не всегда доступен со всех маршрутов. Я дал вам +1, так как по крайней мере теперь у меня есть способ жестко кодировать пути относительно корня. Но я подожду, если кто-нибудь сможет объяснить, почему он работает для CSS из коробки, а не для JS. – jvanderh

+0

Я думаю, что проблема не в css и Javascript, а в том, что вы просто используете свой css внутри своей папки conetne, а не ваш скрипт – Lewis

7

Вы можете создать вспомогательный метод, который делает что-то вроде этого:

<%= Helper.IncludeJavascriptFile("Menu.js") %> 

, а затем в этом помощнике вы делаете что-то например:

public string IncludeJavascriptFile(string fileName){ 
    return Url.Content("<root>/Javascript/Files/" + fileName); 
} 

Затем вы можете вызвать этот вспомогательный метод из своего представления. Если вы решите изменить расположение файлов, то только в одном месте вам придется беспокоиться об этом. Если вы измените имя файла, это сама по себе другая проблема.

+1

+1 для mantainability. – jvanderh

Смежные вопросы