Introduction
This article explains the Client Life Cycle of Ajax Script Manager
and Update Control. It also explains the page life cycle when a partial
postback happens because of Ajax control, and the control over the
events as a devoloper.
The Page Life Cycle of Client [Browser]
We all know the normal ASP.NET page life cycle events. The Ajax
controls will have more events added to those existing. The events are
more related to the client side rather than the server side. The normal
page events happen at the server side and these Ajax events occur in the
client side. I am not going to discuss more about the server page
events, we will look at the page events of the client side.
Sys.Application Class
The events are related to the
Sys.Application class,
which provides a runtime object to take care of client events and to
manage client components. This object provides access to all its members
without creating an instance for it.
pageInit
pageLoad
pageUnload
pageInit
pageInit event occurs only once for the first time when
the page is loaded, and for every normal post back. This event will not
be called when the postback happens to be partial using update panel or
by any other Ajax method. It occurs after the server Page
Render event. Also after all the script related to the
ScriptManager is
loaded, but before the object or controls created in the client client.
If we are creating any components on the client side, this is a good
place to write our first time intialization code. We can have a hold for
this event by adding a function handler to
pageInit event. By simply adding the handler, our function will be called after the
init event.
Since the page is not loaded, we cannot have a reference to any object
or control in the page. We can add any number of handlers to these
events. Also we can remove existing handlers. The syntax looks like
this:
Sys.Application.add_init(MyInit);
function MyInit()
{
alert("MyInit added to page init");
}
pageLoad
pageLoad event occurs after client
pageInit event. After
pageInit event, all the objects or controls are created after that
pageload will
be called. It occurs every time the page is loaded for both normal and
partial renders. We can refer any object here in the event, after this
event the page is served to the user. Similarly as
pageInit event,
pageLoad event will also accept handlers to be added after this event. The syntax is almost similar, looks like this:
Sys.Application.add_load(MyLoad);
function MyLoad()
{
alert("MyLoad added to page load");
}
pageUnload
pageUnload event occurs only once when page is
redirected to another page, or when the browser window is closed. The
redirection has to happen in normal postback or using
Response.Redirect method, if we try to redirect using
Server.Transfer, where the client will not be aware of the page redirection, it throws an client exception named
PageRequestManagerParserErrorException. This event is not linked with server Page Unload event, which occurs after Page
Render in server side, has nothing to do with client side. By the time all controls will be loaded into the browser[client].
pageUnload event will accept handlers to be added after this event. The syntax looks like this:
Sys.Application.add_unload(MyUnload);
function MyUnload()
{
alert("MyUnload added to page unload");
}
Additional Information
The event handlers and other code should be written is a separate js file and that should be specified under scripts section of
ScriptManger control. Here the js file named "
UsingJScript.js" is attached to
ScriptManger control as shown below:
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
<Scripts>
<asp:ScriptReference Path="UsingJScript.js" />
</Scripts>
</asp:ScriptManager>
Sys.WebForms.PageRequestManager Class
This class is responsible for partial post back. This object will be
initiated on its own, to get this object in client side, the page should
have a
ScriptManager and minimum one
UpdatePanel.
This object also has certain events which will be involved in the
client page life cycle. The full name of the class along with the
namespace is
Sys.WebForms.PageRequestManager. Let us see the events related to this:
initializeRequest
beginRequest
pageLoading
pageLoaded
endRequest
initializeRequest
intializeRequest event will be triggered after the
control is triggered for the asynchronous partial postback by the user.
This prepares the request which has to be sent to the server to get the
response. The partial postback can be aborted or cancelled at this
stage. we can add our handlers to this event as any other life cycle
event. Our handlers will be called after the
intialRequest is called. The
intializeRequestEventArgs gives
more details about the event, we get the reference of this class as an
argument of event. The code snippet is shown below:
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(MyIntializeRequest);
function MyIntializeRequest(sender,args)
{
alert("My Request is getting initalized");
}
beginRequest
beginRequest is triggered after the
intializeRequest,
also before the asynchronous postback is processed. This takes care of
sending the request to the server. We can add our handlers to this
event. The handlers are called first before the request is posted to the
server. The
beginRequestEventArgs gives more details about
the event and other objects related to this. Normally this event will
be used to display a graphic or any message to keep the user
interactive, till the request gets processed in the server. After this
particular event, the server takes charge of processing the request. The
code snippet is given below:
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(MyBeginRequest);
function MyBeginRequest(sender,args)
{
alert("My Request is ready about to sent to server");
}
pageLoading
pageLoading is the first event called after the server
process finished, which means after page render event of server. When it
is called, the client is not loaded with the new response and it is in
hold of the response object. We can have a reference of it here for any
manipulations. Also it gives reference to the panels which are going to
get modified after this partial postback. If we require any animation or
transition to happen before the updated data is placed in the
respective position, the
pageLoadingEventArgs gives more
details about the events and other objects related to this. Normally we
will do some control manipulation in this part before it is getting
loaded in the page. The code snippet is given below:
Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(MyPageLoading);
function MyPageLoading(sender, args)
{
alert("My page is started loading");
}
pageLoaded
pageLoaded is event triggered after all the contents of
the page are updated due to synchronous or asynchronous postback. We can
clear the graphic or animation which we initiated in the
beginRequest event here. We get the reference of the response and other object and controls related to the postback using the class
pageLoadedEventArgs. We can also do an animation or trasition here instead of
pageLoading event. The code snippet is below:
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(MyPageLoaded);
function MyPageLoaded(sender, args)
{
alert("My page is loaded");
}
endRequest
endRequest event will be the last event to be triggered
in the client postback cycle. After this, the control is given back to
the user. This event can be used to notify the status of request to the
user. This event can be used to log errors. As a
finally in the
try catch block,
this event will be called irrespective of whether the postback
succeeded or failed. The objects and other data related to this can be
referred using the
endRequestEventArgs class. The code snippet is shown below:
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(MyEndRequest);
Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(MyEndRequest);
function MyEndRequest(sender, args)
{
alert("My Request has end");
}
Additional Information
We can refer this object inside the client
pageInit or in
pageLoad event.
We cannot get the reference of this at the first time, only after the
script is loaded. We can have a hold on the object or will get the
reference of the object. The normal way to add code related to this will
happen inside
pageInit or
pageLoad events. The error handling should be done at the
endRequest event. If any error occurs, then we will get a reference of the error in this event args. When a server throws an error, the
pageLoading and
pageLoaded event were skipped and directly this event will be triggered. We will discuss these issues and the respective
Args Class of each event in the
next article.
No comments:
Post a Comment