如何控制在UpdatePanel部分回发endRequest之后运行哪些JavaScript?

时间:2009-05-22 20:11:26

标签: javascript asp.net-ajax updatepanel

我知道我可以挂钩客户端事件,在每次部分回发后运行JavaScript;但是,我想做这样的事情:

protected void FooClicked(object sender, EventArgs e) {
        ClientScript.RegisterStartupScript(GetType(), "msg", "showMsg('Foo clicked');",true);        
}

我知道我可以用隐藏的字段完全破解它并在每次回发之后运行一些东西,但是应该有一种非常直接的方式来与此类似。

4 个答案:

答案 0 :(得分:9)

您描述的特定代码示例不适用于部分回发,因为ClientScript.RegisterStartupScript()在请求生命周期的输出构建阶段将JS写入页面;而部分回发只通过JavaScript更新页面的选定部分(即使整个页面的标记,包括您的启动脚本,也是在服务器上生成的)。

要严格模仿您所描述的内容,您应该在UpdatePanel中包含一个Literal控件,并在部分回发期间将内容面板的Text属性设置为您希望运行的脚本:

myLiteral.Text = "<script type=\"JavaScript\">doStuff();</script>";

IMO,更合适的方法是使用client-side API for async postbacks注册事件处理程序,以便在回发完成时运行:

function endRequestHandler(sender, args) {
    doStuff();
}

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);

如果你需要将回发期间生成的信息传递给处理程序,你可以通过隐藏字段传递它,并从客户端处理程序中的DOM中获取它。

答案 1 :(得分:2)

IMO,{p> This更加优雅。显然ASP AJAX会调用名为pageLoad的任何JS函数。所以编写一个名为pageLoad的函数,即使在部分更新之后,它也会在每个页面加载时执行。

答案 2 :(得分:1)

<script type="text/javascript" language="javascript">
    function ValidateUserRole() {  
        var answer = confirm("Are you sure..................")
        if (answer) {
            var btnRoleReleatedButton = '<%=btnRoleReleatedButton.ClientID%>';
            document.getElementById(btnRoleReleatedButton).click();
        }
        else {
            return false;
        }
    }
</script>

    

                                                                                                                                                                                                            

Tier 3 :<asp:UpdatePanel ID="upTier3Details" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:DropDownList ID="ddlTier3" runat="server" CssClass="ddlextralarge" Width="350" />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddlUserRole" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>

答案 3 :(得分:0)

执行此操作的最佳方法是使用DoAfterPostBack控件。 你可以从这里免费下载这个控件 http://go2amitech.blogspot.com/2010/08/running-specific-javascript-after.html