为什么我的js没有加载回发?

时间:2011-11-02 19:31:00

标签: asp.net

我有一个下拉列表,通过一些js脚本增强。这个DropDownList位于UpdatePanel中,如下所示:

 <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"));
   }
}

在首次加载页面时成功插入。

但是,在回发(asp:dropDownList的selectedIndexChanged事件)上,应用于下拉列表的样式将丢失......您是否看到了任何原因?

谢谢!

1 个答案:

答案 0 :(得分:0)

我案中的解决方案:

  • 基本上,src文件包含一些在文档就绪时触发的jQuery方法。

但只是注册这个脚本(就像我上面所做的那样)也没有调用那些方法,只包含了那个js文件。

所以我不得不在doc时手动调用它们。就我的情况而言,就绪和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);
    }
}

也许它对其他人也有用。