Правильный способ включения скриптов в страницу 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

Другие вопросы по тегам