How to control which JavaScript gets run after UpdatePanel partial postback endRequest?

寵の児 提交于 2019-11-30 14:17:25

The specific code sample you are describing does not work with partial post-backs, since ClientScript.RegisterStartupScript() writes JS to the page during the output construction phase of the request lifecycle; whereas a partial postback only updates a selected portion of the page via JavaScript (even though the markup for the entire page, including your startup script, is generated on the server).

To closely mimic what you are describing, you ought to include a Literal control inside your UpdatePanel, and during partial postback set the Text property of the content panel to the script you wish to run:

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

IMO, a more proper way is to use the client-side API for async postbacks to register an event handler to run when the postback completes:

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

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

If you need to pass information which was generated during the postback into the handler, you can pass that via hidden fields and grab that from the DOM in your client-side handler.

This is much more elegant, IMO. apparently ASP AJAX will call any JS function named pageLoad. so write a function called pageLoad and it will be executed on every page load, even after partial update.

<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>

the best way to do this is to use the DoAfterPostBack control. you can download this control for free from here http://go2amitech.blogspot.com/2010/08/running-specific-javascript-after.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!