43

How do i run a javascript event after a postback within an updatepanel

Kimtho6
  • 6,154
  • 9
  • 40
  • 56

5 Answers5

79

You can use endRequest event of PageRequestManager.

<form id="form1" runat="server">
<div>
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>   
            <asp:Button runat="server" Text="Button" />
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
</form>
<script type="text/javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_endRequest(function (s, e) {
        alert('Postback!');
    });
</script>
m3kh
  • 7,881
  • 2
  • 31
  • 37
  • I've tried the above method but get a Script Error saying Sys is undefined.... any ideas? – Mych Feb 20 '13 at 15:06
  • 1
    @Mych The "Sys is undefined" error occurs when you place the prm before the "asp:ScriptManager". In order for this to work, the javascript code for the prm variable declaration and the add_endRequest must be after the script manager. Furthermore, VB.net users may want to remind themselves that the "Sys.WebForms..." is case-sensitive unlike the code-behind it resembles. – Ross Brasseaux Jun 27 '13 at 13:47
  • This works great but blocking further postbacks. any solution? – Vijay Kumbhoje Mar 07 '16 at 05:55
27

You can use the ClientScriptManager to make a call to a function on the reload:

ClientScriptManager.RegisterStartupScript(this.GetType(), "AKey", "MyFunction();", true);

http://msdn.microsoft.com/en-us/library/asz8zsxy.aspx

Paddy
  • 33,309
  • 15
  • 79
  • 114
  • @Profeten - is that not what you asked for though? – Paddy Nov 22 '10 at 09:05
  • I do it like this $("#divGetListforUser .btn").click(function() { isClicked = true; }); and set it false after the postback – Kimtho6 Nov 22 '10 at 09:53
  • i used `ClientScript.RegisterOnSubmitStatement()` to reload captcha within a `!IsPostBack` if block and it works like a charm, solved my issue because captcha was a user control etc – Niklas Feb 24 '20 at 05:23
13

Simply

<script type="text/javascript"> 
    function pageLoad() { 

  } 
</script>

<asp:ScriptManager runat="server" />

<asp:UpdatePanel runat="server"> 
  <ContentTemplate> 
    <asp:Button runat="server" ID="Button1" /> 
    <asp:Literal runat="server" ID="TextBox1" /> 
 </ContentTemplate> 
</asp:UpdatePanel>

pageLoad() will then continue to be called each time Button1 is triggered

Read this by Dave Ward

Mina Gabriel
  • 23,150
  • 26
  • 96
  • 124
5

Try this:

$.ajax({
beforeSend: function(){
// Handle the beforeSend event
},
complete: function(){
// Handle the complete event
}
// ......
});
M.Mohammadi
  • 1,558
  • 1
  • 13
  • 25
1

For use within an UpdatePanel i would use the ScriptManager.RegisterStartupScript

Tim B James
  • 20,084
  • 4
  • 73
  • 103