Включая Javascript, только если он еще не был включен в .NET MVC - PullRequest
1 голос
/ 22 января 2012

В частичном представлении .NET MVC я хотел бы сделать что-то вроде этого:

<% ScriptCollection.RequireScript("path/to/script.js"); %>

Для этого потребуется метод в ScriptCollection объекте, который выглядит следующим образом:

public void RequireScript(string src)
{
    if (!_List.Contains(src))
        _List.Add(src);
}

Тогда на моей главной странице у меня будет что-то вроде этого:

<html>
<head></head>
<body>

    <!-- Content would go here -->

    <% foreach (var script in ScriptCollection) { %>
        <script type="text/javascript" src="<%= script %>"></script>
    <% } %>

</body>
</html>

Мой вопрос такой: Как сделать объект ScriptCollection доступным для частичного обновления, а также для использования главной страницей?

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

Правка № 2: Это было бы легко с расширением свойств. Я мог бы просто дать классу HtmlHelper свойство ScriptCollection. Я что-то упустил, что уже существует?

Ответы [ 2 ]

1 голос
/ 31 января 2012

Я проверил сборки Telerik.Они немного излишни для того, что мне нужно.Кроме того, лицензия с открытым исходным кодом (GPL v2) - это не тот тип, который я ищу.

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

code.google.com / p / script-keeper

0 голосов
/ 23 января 2012

Вы можете взглянуть на реализацию класса ScriptRegisterBuilder компании Telerik, которая делает именно то, что вы хотите. Или вы можете просто использовать его. Кроме того, он также поддерживает:

  1. Объединение нескольких файлов JS в один, что приводит к меньшему количеству запросов со стороны браузера.
  2. Сжатие файлов JS.
  3. HTTP-кеширование.
  4. Сети доставки контента.
  5. выпуск / отладка версий ваших ресурсов JS в зависимости от режима сборки.

Теперь, даже когда вы не используете какой-либо другой материал, предоставляемый Telerik, вы можете использовать класс ScriptRegisterBuilder, но тогда рекомендуется отключить автоматическую регистрацию сценария проверки подлинности jquery & jquery. Смотрите также предоставленную ссылку.

Также взгляните на класс StyleSheetRegistrarBuilder. Это племянник класса ScriptRegisterBuilder и обрабатывает ресурсы CSS.

Я заметил тэг MVC2 в вашем вопросе, но мой простой пример использует бритву и предназначен только для пояснения. Не должно быть трудно заставить его работать и для MVC2 / ASPX. В противном случае, дайте мне знать.

Мастер

@using Telerik.Web.Mvc.UI
<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>  
    @Html.Telerik().StyleSheetRegistrar().DefaultGroup(group => group.Add("~/Content/Site.css"))  
</head>
<body>
    @RenderBody()

    @Html.Telerik().ScriptRegistrar().jQuery(false).jQueryValidation(false)    
</body>
</html>

Частичное представление

 @using Telerik.Web.Mvc.UI
 @{
   ViewBag.Title = "Home Page";
   Html.Telerik().StyleSheetRegistrar().DefaultGroup(group => group.Add("~/Content/Site2.css"));
   Html.Telerik().ScriptRegistrar().DefaultGroup(group => group.Add("~/Scripts/Test.js"));
  }

  <h2>@ViewBag.Title</h2>
  <p>
     Bla bla bla
  </p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...