почему мой js не загружается при обратной передаче?

#asp.net

#asp.net

Вопрос:

У меня есть выпадающий список, который расширяется с помощью некоторого js-скрипта. Этот выпадающий список находится внутри панели обновлений следующим образом:

  <asp:UpdatePanel ID="upStoreDetails" runat="server" UpdateMode="Always">
    <ContentTemplate>
        <asp:DropDownList ID="dropRestaurants" runat="server" CssClass="styleCB" AutoPostBack="true" OnSelectedIndexChanged="ddlTenant_SelectedIndexChanged">
        </asp:DropDownList>
        <uc:popuptenantdescription id="popupTenantDescriptionControl" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>
  

Я уже зарегистрировал для него скрипт:

 protected void Page_PreRender(object sender, EventArgs e)
{
    loadJs();
}

private void loadJs()
{
    Type cstype = this.GetType();
    String scriptName = "cufon-yui";

   if (!Page.ClientScript.IsClientScriptIncludeRegistered(cstype, scriptName))
    {
        Page.ClientScript.RegisterClientScriptInclude(this.Page.GetType(), scriptName, VirtualPathUtility.ToAbsolute("~/js/cufon-yui.js"));
   }
}
  

который успешно вставляется при первой загрузке страницы.

Но при обратной передаче (событие SelectedIndexChanged of asp:dropDownList ) стиль, примененный к выпадающему списку, теряется… Вы видите какую-либо причину почему?

Спасибо!

Ответ №1:

Решение в моем случае:

  • по сути, файл src содержит некоторые методы jQuery, которые были запущены при подготовке документа.

Но простая регистрация этого скрипта (как я сделал выше) также не вызывала эти методы, а включала только этот js-файл.

Поэтому мне пришлось вручную вызывать их, когда документ. готов и IsPostBack, для моего случая:

 private void loadJs()
{
    Type cstype = this.GetType();
    String csname = "applyStyleToDropDownList";
    if (!Page.ClientScript.IsClientScriptBlockRegistered(cstype, csname))
    {
        StringBuilder cstext2 = new StringBuilder();
        cstext2.Append("$(function(){ $('.styleCB').customStyle();})");
        ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), csname, cstext2.ToString(), true);
    }
}
  

Может быть, это полезно и для других.