2010-05-19 2 views
5

У меня есть несколько файлов .js, которые я хотел бы хранить в тех же каталогах, что и их представления (они специфичны для представления - просто для того, чтобы оставить javascript отдельно от HTML-представления)ASP.NET MVC - Где вы помещаете ваши .js-файлы, если вы не хотите их хранить в/Scripts?

, добавив их в /Views/ControllerName/ каталога не будут работать, потому что, когда делается запрос на веб-сервер для .js файла:

<script type="text/javascript" src="/Views/ControllerName/myscript.js"></script> 

было бы по существу быть направлен на контроллер «Views», который, очевидно, не суммируется и не существует.

Update

Из того, что я прочитал, добавив следующее IgnoreRoute в методе Global.asax.cs RegisterRoutes должен разрешить доступ к любой запрашиваемой .js файл:

routes.IgnoreRoute("{resource}.js/{*pathInfo}"); 

Однако я Кажется, он не работает?

+0

Ваш ответ не сработал для меня. Это помогло мне: http://stackoverflow.com/questions/9626611/placing-js-files-in-the-views-folder –

ответ

3

решаемые

Найдя и испытан ряд должностей (наиболее убедительное пост here), что я не мог получить работу, следующий решает загадку:

В Global.asax, добавьте следующее код для RegisterRoutes метода:

routes.IgnoreRoute("{file}.js"); 

Существует большой пост здесь, который описывает эту и дополнительную активность here

-1

Сосредоточьте это последнее предложение - возможно, поэтому для них зарезервирован конкретный каталог (/ Scripts /)? ;)

0

У вас есть два варианта, я думаю.

  1. Восстановите структуру папок Views в сценариях и сохраните их в том же относительном местоположении в каталоге сценариев.
  2. Не храните их в отдельных файлах, но используйте отдельный ContentPlaceHolders в MasterPage для секции сценария (обычно в нижней части тела).

Вы также можете сохранить их в любых "специальных" папках, но я считаю, что сценарии являются правильным местом, если вы держите их отдельно.

Обычно я храню общие сценарии (используемые более чем одной страницей) в папке сценариев, без соответствующей иерархии представлений и скриптов для страниц в файле вида, но в отдельном ContentPlaceHolder. Для меня важно не держать JS в отдельном файле, а отдельно от содержания. Использование другого ContentPlaceHolder выполняет это.

+0

Причина, по которой я хочу сохранить javascript в файле, заключается в том, что браузер будет кэшировать его. Встроенный javascript не может быть кэширован. Пожалуйста, исправьте меня, если я ошибаюсь! Спасибо – Jimbo

+0

@Jimbo - действительно ли у вас достаточно javascript для страницы, чтобы беспокоиться о кешировании браузера?Кроме того, не забывайте, что вы создадите дополнительный синхронный запрос для каждого файла javascript. По моему опыту у меня не более нескольких сотен байт, конечно, не более 1 Кбайт javascript на страницу. С включенным сжатием вывода не стоит раздражать сохранение отдельных файлов. – tvanfosson

+0

Действительно - сценарии для этих страниц составляют до 20 КБ, а соединения, которые будут использоваться пользователями, будут работать со скоростью около 1,5 кб/с :( Знаете ли вы, как добавить обработчик маршрута для игнорирования .js-файлов? – Jimbo

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