Я хотел бы иметь некоторые функции ScriptManager в новой модели Asp.net MVC:
1- Скрипт комбинирования
2- Разрешение разных путей для внешних файлов Javascript
3- Уменьшение и сжатие Gzip
Здесь - это то, что я нашел, но я не уверен, что это лучший способ для подхода MVC. В целом, как лучше всего работать с кодом Javascript в модели MVC?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Возможно, вы могли бы просто создать новый контроллер «Сценарии» с различными действиями, обслуживающими различные комбинации сжатых файлов JS. Поскольку MVC разработан с использованием ресурсо-ориентированного подхода, то есть URL-адреса теперь находятся в центре вашей модели программирования, почему бы не определить простые URI и для ваших Javascripts?
Например, в ваших представлениях вы можете ссылаться на свои файлы следующим образом:
<script src = "http://your_domain/scripts/all"/>
Это вызовет ваше действие «все», в результате чего будут отправлены все ваши сжатые файлы сценариев.
Конечно, вам нужно сейчас закодировать объединение и сжатие, или, возможно, повторно использовать Scriptmanager внутри, я не знаю, возможно ли это.
Это всего лишь идея, в настоящее время я ссылаюсь на отдельные файлы javascript прямо на своих главных страницах.
Я предполагаю, что это должен быть статический файл js с другим именем домена в URL-адресе (без файлов cookie). В этом случае ScriptController не работает.
Попробуй это: http://www.codeplex.com/MvcScriptManager
MvcScriptManager is aimed to port certain key features available in AjaxControlToolkit's ToolkitScriptManager into the current ASP.NET MVC Framework. You will be able to use it as a control in your ASP.NET MVC application.
Features
- Script combination (or concatenation). Scripts declared with MvcScriptManager will be combined on the fly into a single script file request when the page is rendered.
- Script minification (or crunching) in release mode. Minification process is done only once at the first request that references the specific script. Subsequent requests will use the crunched script content in cache (see #5 for detail). Crunching can be enabled/disabled for each script.
- Render localized resources for stand-alone script files. Localized strings will be appended to the script if specified.
- Support configurable HTTP compression and expiration setting when outputing scripts.
- Script caching with file dependency. Script file content is cached so that rendering combined script file will be much more performant. Cache dependency is linked to the physical file therefore any script update in the file system will be reflected in the cache instantly.
- Support rendering scripts in debug/release mode based on the running environment.
- Resolving different paths for stand-alone script files.
- Support multiple MvcScriptManagers on a single page (or master page). Support both Master and Slave rendering mode so that scripts declared with one ScriptManager can be rolled over to another one for rendering.
- Support web farm scenario...
Или как насчет включения самого ScriptManager в качестве единственного обитателя уединенного <form runat = "server"> с однократной передачей страниц?
Нравится:-
<form runat = "server">
<asp:ScriptManager ID = "ScriptManager1" runat = "server" EnableScriptGlobalization = "true">
</asp:ScriptManager>
</form>
Работает для меня.
P.S. Вам необходимо убедиться, что этот тег формы никогда не будет встроен в другую форму. Вложенные формы не работают.
Обнаружил, что это исследование почти такой же проблемы: Простой ScriptManager для ASP.NET MVC - написано после того, как на этот вопрос был дан ответ, поэтому добавлено для справки.
В первом случае я использую решение грубой силы, то есть вставляю все это на главную страницу (тем более, что теперь можно вытащить jQuery из CDN Microsoft) - затем мы собираемся изучить варианты более оптимальных решений.
Хотя это выглядит красиво, похоже, что ничего не объединяет и не сжимает. Это позволяет вам легко включать скрипты только один раз на главную страницу.
@luckyllama - честно, проблема в том, что это сложная проблема. Я бы посоветовал, чтобы минимизация в идеале происходила во время сборки, а не во время выполнения. Комбинирование - это серая область, особенно если у вас есть разные комбинации скриптов на каждой странице, потому что вы теряете преимущество кеширования. Сжатие, вероятно, должно обрабатываться сервером, и несколько источников - это совсем другой вопрос, если только не предполагается, что один и тот же сценарий может исходить из двух мест, с которыми у меня все равно возникнут проблемы ...
MVC 4 теперь включает помощников по объединению и минификации. Вы определяете все сценарии, которые входят в ваш пакет, а MVC позаботится об объединении, сжатии, очистке кеша и т. д.
http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification
Я спросил того же Q, см. stackoverflow.com/questions/274536/aspnet-mvc-script-combine, также отправил электронные письма Филу Хаку и Скотти Х, не получил никакого ответа !!