Как стать автором
Обновить

asp.net: регистрация javascript на странице

Время на прочтение2 мин
Количество просмотров9.1K
Обычно при разработке ASP.NET-страниц только самые простые из них не состоят из некоторого числа пользовательских элементов (web user control). Очень часто такие элементы содержат в себе некоторую логику клиентского скрипта написанную в основном на javascript. Проблема может начаться тогда, когда пользовательскому элементу необходимо включить на страницу ссылку на js-файл. Иногда можно увидеть следующее решение проблемы:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="controls_WebUserControl" %>

<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="OnClick()" />

С виду все нормально, код будет работать. Это, наверное, первое решение которое приходит в голову. Так могут написать даже вполне опытные программисты. И это будет ошибкой. Все дело в том, что ASP.NET не может отследить включенную ссылку на js-файл и будет добавлять ее каждый раз при рендеренге очередного элемента на странице. То есть, если ваш элемент на странице присутствует не единожды, то и ссылка на some_js.js появится несколько раз. Что, понятно, нехорошо. Правильное решение проблемы сосредоточено в механизме класса ClientScriptManager и его методов IsClientScriptIncludeRegistered и RegisterClientScriptInclude. Вот правильное решение, которое использует новый метод:
ClientScriptManager clientScript = Page.ClientScript;
Type t = this.GetType();
if (!clientScript.IsClientScriptIncludeRegistered(t, "someScript"))
clientScript.RegisterClientScriptInclude(t, "someScript", ResolveClientUrl("~/js/some_js.js"));

Этот код следует расположить в методе Page_Load или там где следует из логики вашего элемента управления. Здесь происходит проверка на наличие зарегистрированного скрипта и если, его нет, то через функцию RegisterClientScriptInclude производится регистрация some_js.js на странице.

PS: первый пост, не ругайтесь, если что не так с оформлением.
PPS: карма накопилась, переместил из персонального блога
Теги:
Хабы:
+8
Комментарии32

Публикации

Изменить настройки темы

Истории

Работа

.NET разработчик
72 вакансии

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн