So Microsoft now has released Beta 1 of the ASP.NET Ajax Extensions. As expected this update pretty much fries all existing ATLAS code as there are major changes in the framework. I haven’t dug in trying to fix my existing code yet, but just looking over some of the components and client framework changes and spending a couple hours creating a few new samples, it looks like it will take some time to fix up existing code.

 

This is not unexpected since it was clear from hints at Microsoft that there would be a major API change for some time. Bummer for me though – as I have to fix my sessions for ASP.NET connections in a couple of weeks. I was expecting that though <g>…

Ajax, Ajax everywhere – how about some decent naming?

So, I just spent a couple of hours going over just the base AJAX extensions. The base extension is essentially the one official piece in the latest release that will actually ship in the reasonably near future as a ‘real’ product. All the rest of the ATLAS tools is either CTP (the ASP.NET Ajax CTP) as well as the ASP.NET Ajax Toolkit or sort of open source not quite official.

 

Talk about boneheaded naming:

 

ASP.NET AJAX (Beta)

ASP.NET AJAX CTP

ASP.NET AJAX Toolkit

 

Let’s make this as confusing as possible and have 2 versions that are different, but with the same name. Let’s make 1 a beta and one a CTP to really screw with their minds. What are you guys smoking at Microsoft? <g>

 

The functionality of the former ATLAS library gets split into a multiple libraries which are described here along with breaking changes. This is a good document to read as it outlines some of the core changes and philosophy in broad terms.

 

What I take away from this is that most of the former ATLAS functionality is actually not part of the base extension library, but part of the AJAX CTP which is described like this in the documentation:

ASP.NET AJAX CTP

The CTP release is community supported. The features in the CTP release may be added to the supported features in future versions of ASP.NET AJAX. The CTP release is compatible with the Beta version of ASP.NET AJAX.

Now I don’t know about you, but that reads pretty vague to me – as in buyer beware (free but not free, eh?) and leaves a lot of room for interpretation. Specifically it seems to indicate that Microsoft is leaving itself room to modify this part of the framework extensively. So, more or less a continuation of the CTP model and the merry go ‘round of changes.

 

 I make that distinction because it has some important ramifications on forward compatibility which to me is important. Frankly I’ve been getting real burned out on constantly updating and re-doing everything related to ATLAS every 3 or 4 months. The roadmap as laid out looks like that’s not going to change even with the release of Ajax Extensions 1.0 if you plan to use the CTP. Looking at what I see in this beta/ctp combination I still don’t see how I can use Microsoft Ajax in production any time soon.

 

Microsoft Ajax 1.0 Beta – Server side

So the base extensions are pretty minimal in functionality. Loading up just the base Ajax library is a bit of a shock because it has actually very few features especially compared to the ATLAS CTPs. When you look at the toolbox of server controls it basically has the two ScriptManagers, UpdatePanel and a Timer control – that’s it.

 

It looks like the focus of the 1.0 library is to provide just a core set of features that is not particular interesting. The highlight from a developer perspective is the popular UpdatePanel of course which is definitely very useful and powerful, but a little disappointing to see that as the only feature of the main toolkit that is useful out of the box.

 

It’s good to see that some issues have been addressed especially in regards to UpdatePanel. It’s now possible to control the callback handling of update panels more completely. UpdatePanel has a ChildrenAsTriggers property (which can only be set if UpdateMode=”Conditional”) and if set to “false” doesn’t cause a postback in the current update panel. It’s been a big issue for forms like this where the listbox can be updateable but shouldn’t update on the selection click. To make this sample work I made the listbox not updateable (ie. The UpdatePanel around it is commented out). I can now make this work – this has been a big issue with UpdatePanel and I’m glad to see this particular issue addressed.

 

The PageRequestManager client object now has events that fire at various points of the UpdatePanel page processing and it includes an array panels that have been updated at the end of the call. There’s a sample that shows how to do this here.

 

Unfortunately I still don’t see a mechanism to trigger an UpdatePanel to update programmatically from the client side – which is one feature that seems to be among the most requested features on the ATLAS forums. We’re going to have to continue using ‘fake button triggers’ to make this happen.

 

The UpdatePanel is probably the most popular of the server side controls so I’m glad that it’s part of the base library. In addition there’s the Timer control (which works in conjunction with UpdatePanel). But that’s about it as far as server controls are concerned in the base library. The rest of the base server functionality includes the server side runtime support for managing callbacks for the server controls as well as the networking functionality and JavaScript serialization features. Most of the stuff is not interesting to the day to day developer – it’s the core engine for ASP.NET to do its thing internally and provide facilities for control/framework developers.

 

But there are a few interesting classes like the ExtenderControlClass that have been migrated into the base kit (I think this was in the Toolkit previously). Unfortunately the documentation sucks even worse than it did in ATLAS, so there’s no way to really see what it does unless you dig out reflector and take a look. There’s also the JSON serialization code and HttpCompression for WebResources which is useful beyond ATLAS.

 

Microsoft Ajax 1.0 Beta – Client side

If you look at the client library it’s basically runtime level stuff only – the type system, debug/trace, networking including the Web Service interface (thankfully) although Indigo support has been pulled. The one big useful feature for me in this toolset is the Web Service functionality which I’ve used fairly extensively with client code. Only is a little harsh of a word – this stuff is very useful but probably less though to the application developer vs. the tool builder.

 

Most base UI features are there like Behavior, ControlExtender and Control, but no actual specializations of these classes. So client side control implementations are lacking, none of the like hover and float behaviors are there. All the actual specific control implementations are only in the add-on CTP.

 

All of this comes with a client side download of about 26k Gzipped for the library (page that includes both UpdatePanel and a Web Service callback) which isn’t bad, but not that much of an improvement given that it doesn’t include any of the UI libraries.

I ran into a bunch of problems with existing client code. Alot has changed here and it's going to take a while to get things updated and moved over. Right off the top I also ran into a problem with Web Services returning any sort of Data objects (DataTable, DataSet, DataRow) which fails with server side serialization errors. Big problem for me cause I have several samples that use this handy mechanism in conjunction with client side databinding to load data. Haven't found a workaround for this one yet (other than return a List<entity> instead - that works, but you can't bind that automatically).

Documentation got even worse

BTW, if you were hoping for better documentation in this release forget it. It’s actually much worse. Documentation is online and as before it provides a good number of samples and component documentation. The samples are useful and usable, but the component documentation is even worse than the previous ATLAS CTP documentation. For one only the V1 Beta components are available. I see no documentation for the CTP add-on at all.

 

Most functionality of the component documentation stubbed only with no documentation beyond the function signatures. Pathetic that… sorry folks, putting out software of this level of complexity without documentation shows a level of non-professionalism that is painful to see from Microsoft. Seriously! This is supposed to be a BETA so you have no excuse for providing documentation this shitty.

More CTPs are not a good thing

So really, for this stuff to be useful you need to use both the base library and the CTP together. At first glance that may not sound so bad – you haven’t lost anything over ATLAS, right? But I think as developers we really lose big time with this arrangement! ASP.NET Ajax Extensions 1.0 are supposed to ship at the end of the year as a ‘real’ supported product, but it’s clear Microsoft doesn’t intend that same status for the CTP. This means in order to really use ATLAS we’re going to continue to have to deal with a CTP or unsupported and most like changing code. The release schedule for these extensions aren’t clear but if I had to guess I’d say this will eventually be rolled into the Orcas wave of tools. Which if correct would mean this is at least another year off and in the meantime we get to use CTP software that at any point can change…

 

Like I said at the beginning, I’ve been holding off ATLAS for precisely this reason. I’m not about to use this pre-release software that is in a state of heavy flux. I have a fair amount of ATLAS code that I use for demos and experimenting and I’ve had to complete change that code 3 times now (ok 2 plus the changes I’ll have to make now). It’s not too bad to do this to some sample code, but in a production environment this is not something I’d take lightly.

 

Yet these AJAX extensions are by many considered the defacto AJAX standard for ASP.NET ALREADY even though it’s non-shipping software. Especially people who are not intimately involved in the community and online – from the outside looking in all the talk that has been focusing on ATLAS gives the impression that it’s ready to use today. It’s not. And I’m not sure that even V 1.0 will make it so beyond the limited functionality that is in that package.

 

I’m sticking to my custom stuff or using Anthem for the time being and I can look forward to actually being productive and getting stuff done <s>…