Правильный способ включения скриптов в страницу asp.net
У меня есть приложение ASP.NET, которое использует смесь ASP.NET AJAX (включая UpdatePanel) и jQuery, написанную несколькими разработчиками с разным опытом.
Некоторые включены скрипты в самом ScriptManager <asp:ScriptManager><Scripts><asp:ScriptReference....
в то время как другие использовали Page.ClientScript.RegisterClientScriptInclude
в коде позади, а другие использовали прямо <script src="">
включить скрипты.
Я хотел бы объединиться с одним способом обработки этого, если это возможно, но я не уверен, каковы плюсы / минусы каждого способа и какой способ предпочтительнее.
Одним из примеров будет:
protected override void Render(HtmlTextWriter writer)
{
Page.ClientScript.RegisterClientScriptInclude("jQuery", ResolveClientUrl("~/scripts/jquery/js/jquery-1.4.2.min.js"));
base.Render(writer);
}
против
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/scripts/jquery/js/jquery-1.4.2.min.js" />
</Scripts>
</asp:ScriptManager>
против
<script src="Scripts/jQuery/js/jquery-1.4.2.min.js" type="text/javascript"></script>
3 ответа
Не всегда возможно включить весь сценарий в разметку.
Если сценарий зависит от динамических данных, вам нужно "внедрить" сценарий из кода.
Мое правило - всегда стараться избегать "внедрения" скрипта из кода, если это возможно, и использовать его только в качестве крайней меры.
Редактировать:
Использование scriptmanager предпочтительнее, если у вас много разных файлов скриптов.
При использовании scriptmanager все скрипты будут "объединены" в один файл. Это влияет на то, как браузер загружает скрипты. Браузеры обычно имеют ограничение в 2 одновременных соединения, и если у вас есть 10 скриптов, вам нужно будет загрузить их все за 5 шагов. Scriptmanager позаботится о том, чтобы все это происходило за один шаг.
<asp:scriptreference>
является декларативным эквивалентом вызова ScriptManager.RegisterScriptBlock()
так же, как и любое другое объявление управления asp.net похоже на программирование Controls.Add()
,
Это, как говорится, на самом деле не существует "предпочтительного пути". Если вы создаете распространяемые веб-элементы управления, то вам нужно вызывать различные .RegisterScript...()
методы из процедур установки вашего элемента управления, а не полагаться на пользователя, добавившего разметку.
Если вы просто хотите включить скрипты в веб-сайт, возможно, более удобно использовать метод разметки.
Если вы добавляете скрипты во время Ajax-вызовов, вы можете использовать ScriptManager
сделать это. Если вы добавляете скрипты на обычные постбэки, вы можете использовать ClientScriptManager
сделать это.
Так что... сложно перечислять плюсы и минусы. В вашем случае, если вы не создаете распространяемый код, то самый очевидный и простой способ - включить ссылки на скрипты с помощью разметки, потому что она имеет тенденцию быть более заметной. Но я не уверен, что вы сможете объединить каждое вхождение в один метод, потому что все методы существуют по определенной причине, и вам может понадобиться использовать более одного.
Я бы порекомендовал загрузчик сценариев Ajax (если вы работаете в asp.net, в библиотеке ajax asp.net, в среде jquery)
http://www.asp.net/ajaxlibrary/Ajax%20Script%20Loader.ashx
http://www.asp.net/ajaxlibrary/HOW%20TO%20Combine%20Scripts%20using%20the%20Script%20Loader.ashx