代码之家  ›  专栏  ›  技术社区  ›  technomalogical

ASP。NET AJAX和UserControls:处理客户端脚本

  •  1
  • technomalogical  · 技术社区  · 16 年前

    pageLoad 活动。

    页面加载 调用a的函数 contentPageLoad 如果该函数存在,则在任何ContentTemplate上执行该函数。持有有问题的UserControl的ContentTemplate将负责在此事件期间调用UserControl上的相应函数。

    .ascx Page.ClientScript

    仅供参考:每个UserControl需要执行的代码是一个jQuery块,它从标准HTML创建了一个多选控件 <select> .

    RegisterStartupScript 建议这样做,但这会在DOM加载完成之前运行。将函数封装在jQuery Document.ready()中似乎没有帮助。用户控件正在内部运行 UpdatePanel ,所以我真的没有选择如何调用这个脚本。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Dan Davies Brackett    16 年前

    ClientID JS函数定义中的用户控件:

    function onLoadInitialize_<%=ClientID%>(){/*do things*/}
    

    然后使用 Page.ClientScript.RegisterStartupScript 使其在客户端加载期间发生。请注意 page_load happens on every asynchronous postback ;如果您希望每次实际页面加载(不包括异步回发)只发生一次,请使用init事件。

        2
  •  2
  •   technomalogical    16 年前

    Page.ClientScript ,不是作为启动脚本,而是作为ClientScriptBlock。该函数使用类而不是ID(因此, ClientID

    if(!Page.ClientScript.IsClientScriptBlockRegistered(Page.GetType(),"scriptkey"))
    {
        Page.ClientScript.RegisterClientScriptBlock(
            Page.GetType(),"scriptkey",script,true);
    }
    

    使用以下脚本:

    function bindMultiSelects() {
        $('.multiselectclass').multiSelect({
            oneOrMoreSelected: '*', 
            noneSelected: 'Select Item(s)'
        });
    }
    

    (使用真棒 jQuery MultiSelect plugin )

    同样,这是有效的,因为我的母版页创建了一个 page_load 方法,然后调用内容上的方法,然后该方法调用 bindMultiSelects contentPageLoad 这两个函数都遵循我发现的“插件”模式 here :

    if(typeof functionname=='function') {
        functionname()
    }