Проблема с пользовательской веб-частью несколько раз на одной странице - PullRequest
1 голос
/ 06 января 2011

В настоящее время я работаю над созданием веб-части, которая запускает некоторые jquery с переключаемой функциональностью для некоторых элементов в ней. Моя проблема здесь в том, что эта веб-часть предназначена для использования несколько раз на одной и той же веб-странице, что, как я обнаружил, доставляет мне немало хлопот, так как JavaScript будет загружаться на страницу несколько раз, пытаясь вызвать функции для тех же элементов.

Я думал, что было бы разумно создать пару методов для изменения различных значений здесь и там, но в итоге я закончил с той же проблемой.

Так что теперь у меня нет идей, и мои навыки в jquery и javascript ограничены. Поэтому любая помощь, образцы, указатели - все, что заставляет меня приближаться к решению, я буду очень благодарен.

Сценарий jquery:

$(document).ready(function (){ 
      $('.togglingDiv').find('dd').hide().end().find('dt').click(function() {
             $(this).next().slideToggle("fast");
      });
});

HTML-код, который переключает jquery:

<dl class="togglingDiv">
    <dt>Lorem ipsum</dt>
    <dd>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.</dd>
    <dt>Lorem ipsum</dt>
    <dd>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.</dd>
    <dt>Lorem ipsum</dt>
    <dd>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.</dd>
 </dl>

Ответы [ 3 ]

3 голосов
/ 06 января 2011

Ваши веб-части могут загружать JavaScript с помощью ClientScriptManager .Примерно так будет включаться сценарий только один раз:

ClientScriptManager scriptManager = this.Page.ClientScript;

if (!scriptManager.IsClientScriptIncludeRegistered("scriptName"))
    scriptManager.RegisterClientScriptInclude("scriptName", "scriptUrl");

Вы также можете использовать .RegisterClientScriptBlock , если не можете использовать внешний файл.

2 голосов
/ 06 января 2011

В аналогичном сценарии я заменял <dl class="togglingDiv"> на <dl id="togglingDiv" runat="server">.Когда у него есть «сервер runat», Asp.net заботится о создании разных идентификаторов для каждого экземпляра вашего «togglingDiv».

Затем вы помещаете код jQuery в файл ascx и генерируете его, используя ASP.Net.<%= .... %> конструкция:

$(document).ready(function (){       
 $('#<%=togglingDiv.ClientId%>').find('dd').hide().end().find('dt').click(function()
  {             
  $(this).next().slideToggle("fast");   
  }); 
});
1 голос
/ 06 января 2011

Если у вас есть javascript в файле, вы можете использовать метод ScriptLink.Register .

ScriptLink инкапсулирует вызовы ClientScriptManager вместе с дополнительными функциями. Обратите внимание, что если параметр name является относительным путем, файл javascript должен находиться в каталоге 12 \ TEMPLATE \ LAYOUTS \ LCID (где LCID - номер вашего языка).

...