#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);
}
}
Может быть, это полезно и для других.