У меня есть приложение ASP.NET, которое использует смесь Ajax ASP.NET (Включая 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>
Не всегда можно включить в разметку весь сценарий.
Если сценарий зависит от динамических данных, вам необходимо «внедрить» сценарий из кода.
Мое правило - всегда стараться по возможности избегать "внедрения" скрипта из кода позади и использовать это только в крайнем случае.
Изменить:
Использование диспетчера сценариев предпочтительнее, если у вас много разных файлов сценариев.
При использовании диспетчера сценариев все сценарии будут «объединены» в один файл. Это влияет на то, как браузер загружает скрипты. Браузеры обычно имеют ограничение в 2 одновременных подключения, и если у вас 10 скриптов, вам нужно будет загрузить их все за 5 шагов. Scriptmanager позаботится о том, чтобы все происходило за один шаг.
Я бы рекомендовал загрузчик сценариев Ajax (если вы работаете в среде asp.net, asp.net ajax library, jquery)
http://www.asp.net/ajaxlibrary/Ajax%20Script%20Loader.ashx
http://www.asp.net/ajaxlibrary/HOW%20TO%20Combine%20Scripts%20using%20the%20Script%20Loader.ashx
является декларативным эквивалентом вызова ScriptManager.RegisterScriptBlock ()
, как и любое другое объявление элемента управления asp.net. аналогично выполнению программного Controls.Add ()
.
При этом на самом деле не существует «предпочтительного пути». Если вы создаете распространяемые веб-элементы управления, вам нужно будет вызывать различные методы .RegisterScript ... ()
из процедур настройки вашего элемента управления, а не полагаться на добавление разметки пользователем.
Если вы просто хотите включить скрипты на веб-сайт, вероятно, удобнее использовать метод разметки.
Если вы добавляете сценарии во время вызовов Ajax, вам следует использовать для этого ScriptManager
. Если вы добавляете сценарии в обычные обратные передачи, то для этого вам нужно использовать ClientScriptManager
.
Итак ... сложно перечислить плюсы и минусы. В вашем случае, если вы не создаете распространяемый код, наиболее очевидным и простым способом является включение ссылок на скрипты с помощью разметки, поскольку она имеет тенденцию быть более заметной. Но я не уверен, что вы сможете объединить каждое вхождение в один метод, потому что все методы существуют по какой-то причине, и вам может потребоваться использовать более одного.