250 likes | 420 Views
Power ASP.NET AJAX Programming. Agenda. Partial-page rendering With UpdatePanel Without UpdatePanel PageRequestManager Drag-and-drop user interfaces Client-side animations. Partial-Page Rendering. Browser submits HTTP request to server. 1. Browser. Web Server.
E N D
Agenda • Partial-page rendering • With UpdatePanel • Without UpdatePanel • PageRequestManager • Drag-and-drop user interfaces • Client-side animations
Partial-Page Rendering Browser submits HTTP request to server 1 Browser Web Server Server responds with content; browser renders that content 2 Browser submits async XML- HTTP request to server; UI remains responsive; page doesn't flash 3 XML-HTTP request completes; JavaScript refreshes portion of page affected by response 4
UpdatePanel • Partial-page rendering in a box • Automatically converts postbacks into async callbacks • Automatically updates content using callback results • Requires no knowledge of JavaScript or XmlHttpRequest • High-level abstraction of XmlHttpRequest • Upside: Extremely easy to use, widely applicable • Downside: Less efficient than classic AJAX • Exemplifies value added by AJAX frameworks
Script-Callable Web Service [System.Web.Script.Services.ScriptService] public class ZipCodeService : System.Web.Services.WebService { [System.Web.Services.WebMethod] public string[] GetCityAndState (string zip) { ... } }
Declaring a Service Reference <asp:ScriptManager ID="ScriptManager1" Runat="server"> <Services> <asp:ServiceReference Path="ZipCodeService.asmx" /> </Services> </asp:ScriptManager>
Calling a Web Service ZipCodeService.GetCityAndState("98052", onCompleted); . . . function onCompleted (result) { window.alert(result); }
Microsoft AJAX Library Scripts 15K MicrosoftAjax.js Script Core Library (run-time + framework) Internet Explorer 7K MicrosoftAjax- WebForms.js Partial-page rendering Firefox MicrosoftAjaxTimer.js Sys.UI._Timer class PreviewScript.js Base Class Library (controls, XML script, etc.) Safari PreviewGlitz.js UI enhancements (animation and opacity) PreviewDragDrop.js Other Drag-and-drop
MicrosoftAjaxWebForms.js • Partial-page rendering support • Sys.WebForms namespace • PageRequestManager class • Client-side counterpart to UpdatePanel • Manages async callbacks used for partial-page rendering and performs content updates using results • Client-side OM enables advanced UpdatePanel customizations not possible from server side • _UpdateProgress class
PageRequestManager Methods • Provide programmatic control over client-side PageRequestManager
PageRequestManager Events • PageRequestManager fires client-side events • Hook events on client for advanced customizations
Canceling Asynchronous Updates <asp:Button ID="CancelButton" Runat="server" Text="Cancel" OnClientClick="cancelUpdate(); return false" /> . . . <script type="text/javascript"> function cancelUpdate() { var obj = Sys.WebForms.PageRequestManager.getInstance(); if (obj.get_isInAsyncPostBack()) obj.abortPostBack(); } </script>
PreviewDragDrop.js • Adds drag-drop support to BCL • Sys.Preview.UI namespace • _DragDropManager provides core support • Global instance named DragDropManager • IDropSource and IDropTarget interfaces define signatures for drop-source and drop-target classes • DragDropList and DraggableListItem provide canned implementation of reorderable lists • FloatingBehavior provides generic mechanism for floating images, DIVs, and other entities
Floating an Image <img id="FloatMe" src="..."> ... <script type="text/javascript"> function pageLoad() { var float = new Sys.Preview.UI.FloatingBehavior ($get('FloatMe')); float.set_handle($get('FloatMe')); float.initialize(); } </script>
Drag-and-Drop • PreviewScript.js includes drag-drop types • Sys.Preview.UI namespace • _DragDropManager provides core support • Global instance named DragDropManager • IDropSource and IDropTarget interfaces define signatures for drop-source and drop-target classes • DragDropList and DraggableListItem provide canned implementation of reorderable lists • FloatingBehavior provides generic mechanism for floating images, DIVs, and other entities
Implementing IDragSource Custom.UI.MyDragSourceBehavior = function(element) { Custom.UI.MyDragSourceBehavior.initializeBase(this, [element]); this._mouseDownHandler = Function.createDelegate(this, this.mouseDownHandler); ... } Custom.UI.MyDragSourceBehavior.prototype = { // IDragSource methods get_dragDataType: function() { ... }, getDragData: function(context) { ... }, get_dragMode: function() { ... }, onDragStart: function() { ... }, onDrag: function() { ... }, onDragEnd: function(canceled) { ... }, // Other methods initialize: function() { ... }, mouseDownHandler: function(ev) { ... }, dispose: function() { ... }, } Custom.UI.MyDragSourceBehavior.registerClass('Custom.UI.MyDragSourceBehavior', Sys.UI.Behavior, Sys.Preview.UI.IDragSource);
Implementing IDropTarget Custom.UI.MyDropTargetBehavior = function(element) { Custom.UI.MyDropTargetBehavior.initializeBase(this, [element]); ... } Custom.UI.MyDropTargetBehavior.prototype = { // IDropTarget methods get_dropTargetElement: function() { ... } canDrop: function(dragMode, dataType, data) { ... } drop : function(dragMode, dataType, data) { ... } onDragEnterTarget : function(dragMode, dataType, data) { ... } onDragLeaveTarget : function(dragMode, dataType, data) { ... } onDragInTarget : function(dragMode, dataType, data) { ... } // Other methods initialize: function() { ... } dispose: function() { ... } } Custom.UI.MyDropTargetBehavior.registerClass('Custom.UI.MyDropTargetBehavior', Sys.UI.Behavior, Sys.Preview.UI.IDropTarget);
Using DragDropManager • Call DragDropManager.registerDropTarget to register a drop target • Typically done in drop target's initialize method • Call DragDropManager.startDragDrop to begin a drag-drop operation • Typically done in drag source's mouse-down handler • Call DragDropManager.unregisterDropTarget to unregister drop target • Typically done in drop target's dispose method
PreviewGlitz.js • Adds UI enhancements to BCL • Sys.Preview.UI.Effects namespace • OpacityBehavior class wraps opacity of elements • LayoutBehavior class wraps layout (size and pos) • Animation and derivatives support animations Property- Animation Interpolated- Animation Discrete- Animation Number- Animation Length- Animation Composite- Animation Fade- Animation
Fading In an Image <img id="SplashImage" src="..."> ... <script type="text/javascript"> function pageLoad() { var image = new Sys.Preview.UI.Image ($get('SplashImage')); var fade = new Sys.Preview.UI.Effects.FadeAnimation(); fade.set_target(image); fade.set_effect (Sys.Preview.UI.Effects.FadeEffect.FadeIn); fade.set_duration(3); fade.set_fps(20); fade.play(); } </script>