We usually bind the events for controls to be handled with jQuery in the $(document).ready. But when I tried to try the same for the controls inside the UpdatePanel, I caught up with an issue. The event hooking works fine until the AsyncPostBack happens, but not after that. Its clear that the initial subscription is nomore valid, for which I searched for that and found out in the web.
PageRequestManager
The endRequest event of the PageRequestManager will provide the right space to solve the issue. We need to resubscribe to the events again upon AsyncPostBack. As per the msdn documentation, the endRequest event is Raised after an asynchronous postback is finished and control has been returned to the browser.
The following snippet will do this for you.
Snippet 1
Have specified an example below which describes the above specified solution.
Snippet 2
REFERENCE
http://msdn.microsoft.com/en-us/library/bb383810.aspx
PageRequestManager
The endRequest event of the PageRequestManager will provide the right space to solve the issue. We need to resubscribe to the events again upon AsyncPostBack. As per the msdn documentation, the endRequest event is Raised after an asynchronous postback is finished and control has been returned to the browser.
The following snippet will do this for you.
Snippet 1
$(document).ready(function () { initiateBinding(); Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); }); function EndRequestHandler(sender, args) { initiateBinding(); } function initiateBinding() { //Do the subscription here. }
Have specified an example below which describes the above specified solution.
Snippet 2
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PageRequestManager.aspx.cs" Inherits="PageRequestManager" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.1.min.js"></script> <script type="text/javascript"> $(document).ready(function () { initiateBinding(); Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); }); function initiateBinding() { $("input[id$='ClientClickButton']").click(function (event) { event.preventDefault(); alert("Click event handling from jQuery"); }); } function EndRequestHandler(sender, args) { if (args.get_error() == undefined) { initiateBinding(); } else { var errorMessage = args.get_error().message; args.set_errorHandled(true); //Do error handling here. alert("Error : " + errorMessage); } } </script> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <div> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Button ID="ClientClickButton" runat="server" Text="Client Click Button" /> <br /> <br /> <asp:Button ID="AsyncPostBackTestButton" runat="server" Text="Async PostBack Test Button" /> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="AsyncPostBackTestButton" EventName="Click" /> </Triggers> </asp:UpdatePanel> </div> </form> </body> </html>
REFERENCE
http://msdn.microsoft.com/en-us/library/bb383810.aspx
Very important issue solved
ReplyDelete