Yesterday I wrote about issue with Ajax postbacks in application I am working currently. Problem was with buttons that was triggering UpdatePanels
to update asynchronously. After adding loading indicator I wanted to add error handling at client side.
As loading was handled by PageRequestManager
events I was trying to achieve errors the same way. At first I created some html to show when error happens:
<div id="errorDialog" class="hidden"> <div class="ui-widget center height100per width100per"> <div class="ui-state-error ui-corner-all" style="padding: 0 .7em;"> <p> <span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span> <strong>Error:</strong> <br /> <span id="errorDesc"></span></p> </div> </div> </div>
It creates Alert container from jQueryUI theme as you can see here http://jqueryui.com/themeroller/. For me it’s looks like this:
Styles are mostly from this library. Mine classes have meaningful names and are defined:
.width100per { width:100%; } .height100per { height:100%; }
Folks at Microsoft does not added special event for handling errors in
PageRequestManager
, but args
argument of event endRequest
handler can tell as if something bad happened inside our application:
pageManager.add_endRequest(function (sender, args) { if (args.get_error() != undefined) { alert("Ouch!"); alert(args.get_error().message); } });
Now we have to just add some logic to show error message inside our error container:
pageManager.add_endRequest(function (sender, args) { if (args.get_error() != undefined) { var errorMessage = args.get_error().message; args.set_errorHandled(true); jQuery('#errorDesc').html(htmlEncode(errorMessage).replace(":", "<br />")); jQuery('#errorDialog').dialog({ width: 600, height: 300 }); } function htmlEncode(value) { return jQuery('<div/>').text(value).html(); } });
htmlEncode
function replaces special HTML charachters like <
or >
with HTML entities. It’s works by creating in-memory-only div element, and then setting some HTML as text and getting this as HTML. Simple as that. I added replacing :
with HTML next line to show error description from C# in below summary of exception. After that dialog is opening to show to user that something bad happens.
Dialog is much bigger then it needs to be but I think that user must know that it’s something serious and bigger message helps with that 🙂
That’s all!