Я хочу сохранить весь свой код JavaScript в одном разделе; прямо перед закрывающим body
тегом на моей главной странице макета и просто интересно, что лучше сделать, стиль MVC.
Например, если я создаю DisplayTemplate\DateTime.cshtml
файл, который использует средство выбора даты и времени jQuery UI, я бы встроил JavaScript непосредственно в этот шаблон, но затем он отобразит среднюю страницу.
В моих обычных представлениях я могу просто использовать @section JavaScript { //js here }
а затем @RenderSection("JavaScript", false)
в моем основном макете, но это, похоже, не работает в шаблонах отображения / редактора - есть идеи?
Ответы:
Вы можете использовать сочетание двух помощников:
а затем в вашем
_Layout.cshtml
:и где-то в каком-то шаблоне:
источник
sections
. В MVC4 Bundling действительно можно использовать, так как это помогает уменьшить размер скриптов.head
теге, а не в концеbody
тега, потому что@Html.RenderScripts()
они будут выполняться до вашего частичного просмотра, а следовательно, и до@Html.Script()
.Измененная версия ответа Дарина для обеспечения порядка. Также работает с CSS:
Вы можете добавить ресурсы JS и CSS следующим образом:
И визуализируйте ресурсы JS и CSS следующим образом:
Вы можете выполнить проверку строки, чтобы увидеть, начинается ли она со сценария / ссылки, поэтому вам не нужно явно определять, что представляет собой каждый ресурс.
источник
Я столкнулся с той же проблемой, но предлагаемые здесь решения работают хорошо только для добавления ссылки на ресурс и не очень подходят для встроенного JS-кода. Я нашел очень полезную статью и обернул все мои встроенные JS (а также теги скриптов) в
И в представлении _Layout, размещенном
@Html.PageScripts()
непосредственно перед закрывающим тегом body. Для меня работает как оберег.Сами помощники:
источник
Мне понравилось решение, опубликованное @ john-w-harding, поэтому я объединил его с ответом @ darin-dimitrov, чтобы сделать следующее, вероятно, слишком сложное решение, которое позволяет отложить рендеринг любого html (также скриптов) в блоке using.
ИСПОЛЬЗОВАНИЕ
В повторяющемся частичном представлении включите блок только один раз:
В (повторяющемся?) Частичном представлении включайте блок каждый раз, когда он используется:
В (повторяющемся?) Частичном представлении включите блок один раз, а затем визуализируйте его конкретно по имени
one-time
:Для рендеринга:
КОД
источник
Установите пакет Nuget Forloop.HtmlHelpers - он добавляет несколько помощников для управления скриптами в частичных представлениях и шаблонах редактора.
Где-то в вашем макете нужно позвонить
Здесь будут выводиться любые файлы сценариев и блоки сценариев на странице, поэтому я бы рекомендовал поместить их после основных сценариев в макете и после раздела сценариев (если он у вас есть).
Если вы используете The Web Optimization Framework с объединением, вы можете использовать перегрузку
так что этот метод используется для записи файлов сценария.
Теперь, когда вы хотите добавить файлы сценариев или блоки в представление, частичное представление или шаблон, просто используйте
Помощники обеспечивают отображение только одной ссылки на файл сценария, если добавляются несколько раз, а также обеспечивают отображение файлов сценария в ожидаемом порядке, т.е.
источник
Этот пост мне действительно помог, поэтому я подумал, что опубликую свою реализацию основной идеи. Я представил вспомогательную функцию, которая может возвращать теги скрипта для использования в функции @ Html.Resource.
Я также добавил простой статический класс, чтобы я мог использовать типизированные переменные для идентификации ресурса JS или CSS.
И в использовании
Спасибо @Darin Dimitrov, который дал ответ на мой вопрос здесь .
источник
Ответ, данный в разделе «Заполнить раздел бритвы из частичного» с помощью
RequireScript
HtmlHelper, следует тому же шаблону. Он также имеет то преимущество, что он проверяет и подавляет повторяющиеся ссылки на один и тот же URL-адрес Javascript, а также имеет явныйpriority
параметр, который можно использовать для управления порядком.Я расширил это решение, добавив методы для:
Мне нравятся решения Darin & eth0, поскольку они используют
HelperResult
шаблон, который позволяет использовать блоки сценариев и CSS, а не только ссылки на файлы Javascript и CSS.источник
@Darin Dimitrov и @ eth0 отвечают на вопрос об использовании расширения пакета:
источник