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

Обычно при разработке ASP.NET-страниц только самые простые из них не состоят из некоторого числа пользовательских элементов (web user control). Очень часто такие элементы содержат в себе некоторую логику клиентского скрипта написанную в основном на javascript. Проблема может начаться тогда, когда пользовательскому элементу необходимо включить на страницу ссылку на js-файл. Иногда можно увидеть следующее решение проблемы:



<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="controls_WebUserControl" %>
<script src="../js/some_js.js" type="text/javascript"></script>
<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 на странице.

Источник: http://habrahabr.ru



Опубликовал admin
19 Май, Понедельник 2008г.



Программирование для чайников.