Управление скриптами страницы просмотра в ASP.NET MVC

#javascript #asp.net-mvc

#javascript #asp.net-mvc

Вопрос:

Я хотел узнать ваше мнение об управлении скриптами в ASP.ЧИСТЫЙ MVC. Есть 2 проблемы, которые мне особенно интересны:

  1. Сценарий отслеживания включает зависимости представлений
  2. Управление и минимизация сценариев просмотра

Как и во многих проектах, мои представления состоят из нескольких частичных представлений и шаблонов редактора. Мне нравится сохранять сценарии, относящиеся к этим представлениям, в одном и том же объекте кода, например

Частичное представление SigningKeysForm должно иметь свои собственные скрипты jQuery / jQueryUI.

Это означает, что любое представление, которое отображает это частичное представление, должно включать файлы сценариев jQuery / jQueryUI.

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

Мой текущий подход к этим проблемам заключается в использовании нисходящего синтаксического анализа представлений в ASP .Чистый MVC.

Для решения первой проблемы я определяю расширение HtmlHelper для включения скрипта, например

 <% Html.RequireScript(Scripts.JQuery); %>
  

Таким образом, в каждом частичном представлении и представлении я явно указываю, какие скрипты требуются. Реализация этого метода заключается в создании HashSet для текущего HttpContext и добавлении туда требуемого скрипта.

На моей главной странице у меня есть другое расширение HtmlHelper, которое проверяет HttpContext и отображает теги, включающие скрипт, например:

 <%=Html.RenderScriptIncludeTags()%>
  

Таким образом, я могу отслеживать требования к представлениям и отображать только требуемые скрипты.

Для сценариев просмотра я использую аналогичный подход. Я использую пользовательский пользовательский элемент управления Asp .Net, который вместо рендеринга своего содержимого сохраняет содержимое скрипта в буфер на HttpContext, например:

  <mvc:script runat="server">
     $(function(){
          alert("Hello "   "<%=Model.Name%>");
     });
 </mvc:script>
  

Опять же, в главном представлении у меня есть расширение HtmlHelper, которое минимизирует (при необходимости) сохраненные скрипты и отображает их, например:

   <%=Html.RenderScripts()%>
 </body>
  

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

Я хочу знать, есть ли лучшие способы управления требованиями к сценариям и сценариями просмотра страниц с помощью ASP.ЧИСТЫЙ MVC.

Ответ №1:

Вы думали об использовании существующего инструмента, который выполняет подобные действия, например, Cassette (ранее назывался Knapsack)?

Cassette автоматически сортирует, объединяет, минимизирует, кэширует и версирует все ваши шаблоны JavaScript, CoffeeScript, CSS, LESS и HTML.

Я лично не использовал его (пока), но он выглядит довольно хорошо, и кажется, что он должен делать именно то, что вам нужно (и даже больше). Стоит отметить, что для коммерческого использования существует небольшая стоимость.

РЕДАКТИРОВАТЬ: теперь выпущен под лицензией MIT 🙂

Комментарии:

1. Как бы вы загружали свои скрипты параллельно с Cassette?

2. Примечание: это не MIT, не GPL commercial 🙂

3. @Ryan Идея заключается в том, что Cassette объединяет его в один запрос, поэтому не нужно загружать несколько скриптов 🙂

Ответ №2:

У Telerik есть утилита регистрации сценариев, которая делает именно то, что вы делаете.

http://www.telerik.com/help/aspnet-mvc/web-assets-working-with-javascript-web-assets.html

В качестве бонуса он также выполняет сжатие.

Да, он отображает скрипты внизу.
Лично я обычно включаю несколько важных скриптов сверху обычным способом, а остальные — с помощью scriptregistrar. Таким образом, я могу иметь некоторые скрипты, доступные во время загрузки страницы.

Регистратор сценариев telerik является частью их пакета MVC. http://www.telerik.com/products/aspnet-mvc.aspx

Комментарии:

1. Регистраторы Telerik не будут сокращаться. Они будут только объединять и gzip-сжимать ваши материалы.