This space is available to any ComponentArt employee to write about anything.

"Interoperability" vs. "True ASP.NET AJAX Controls"

"Interoperability" is a term that has been used by several ASP.NET control vendors, including ComponentArt, to describe integration with ASP.NET AJAX. However, since we shipped the first public beta release of Web.UI for ASP.NET AJAX, we started using new verbiage to describe our product offering: "True ASP.NET AJAX Controls".
 
Is this just marketing spin? Is there some technical backup for these claims? Finally, as an ASP.NET AJAX developer, why should you care? I'll try to explain the meaning of these terms, and let you draw your own conclusions.
 
Interoperability
 
Providing interoperability with ASP.NET AJAX essentially means that the controls won't break when used with ASP.NET AJAX. Specifically, they will operate as expected when nested inside the new UpdatePanel control, and they won't **interfere** with the ASP.NET AJAX client-side JavaScript code.
 
However, controls that provide interoperability with ASP.NET AJAX are actually native ASP.NET 2.0 controls, tweaked so they can co-exist on the same page with ASP.NET AJAX. They don't have any ASP.NET AJAX dependencies and don't really take advantage of ASP.NET AJAX features.
 
Providing this level of support for ASP.NET AJAX is definitely the first step in targeting Microsoft's new web development framework. ComponentArt originally started providing interoperability with ASP.NET AJAX (or "Atlas") back in May of 2006 with Web.UI 2006.1 SP2.
 
True ASP.NET AJAX Controls
 
There is much more to ASP.NET AJAX than the UpdatePanel control. Actually, the most significant aspect of ASP.NET AJAX is that it introduces a real framework for JavaScript development, including a comprehensive model for creating client-side components and controls.
 
ComponentArt Web.UI for ASP.NET AJAX is the first commercial control suite built on top of this new component model. Having user interface controls that allow complete client-side programmatic manipulation opens up a world of possibilities. What's more important, these client-side capabilities are exposed in a standardized way, which is supported by Microsoft, and guaranteed to work with ASP.NET vNext, and Visual Studio Orcas.
 
Watch the Video
 
The difference between "interoperability" and "true ASP.NET AJAX controls" is explained quite well in the video we recently published. If you have 5 odd minutes to invest into perhaps getting a deeper understanding of the subject by seeing some of this functionality in action, then I highly recommend it: 
 
- Video: ComponentArt Web.UI for ASP.NET AJAX 
 
I think the following quote by a seasoned industry veteran sums it up quite well:


    "Writing the code you show in the video has been my dream for 7 years now.
        Since the time I saw a very early demo of what was then called ASP+. "
 
        Dino Esposito
        Author, Speaker, and Columnist for the MSDN Magazine
 

Thank you Dino. It has been our dream too. :)

Share this post: email it! | bookmark it! | digg it! | reddit!

Posted by: Miljan
Posted: Monday, January 08, 2007 9:42 AM


Comments

Herr Ziffer said:

Well articulated, Miljan, and an excellent pre-emption against those who might be inclined to call your new moniker that most dreaded of internet words: "hype". What you describe as "true asp.net ajax ..." is clearly not hype, but rather an important distinction that will set the work that your developers have done apart from the rest of the pack.
# January 8, 2007 10:30 AM

Jonathan B. said:

When it comes to "True ASP.NET AJAX Controls", it seems there is missing aspect that the market still needs to address. That is, we need a way to make components aware of the Ajax nature where state information often is not needed in postbacks to the server. Currently, ViewState and other Hidden form variables are extensively used by ComponentArt (and all other vendors), even when they are an unnecessary burden on the Ajax process. I hope more progress is made in the near future to allow clients to selectively disable use of ViewState or ControlState and Hidden form variables for Ajax applications where the information in question is not needed during postbacks (both on the request and response side). This is significant baggage, especially on elaborate Ajax websites. Will CA be the first to offer this feature?
# January 17, 2007 3:32 PM

Miljan said:

Interesting point Jonathan!

Yes - there are scenarios where the state is not needed, and the overall application performance would be improved if it was not sent over the wire on each post.

Thankfully, viewstate can already be disabled on any ASP.NET control by setting the EnableViewState property to false. All ComponentArt controls respect this setting.

# January 18, 2007 8:22 AM

Jonathan B. said:

Miljan ... shortly after I posted my comment, I realized that I could have more clearly stated how this class of concern is not so easily avoided. The unfortunate property of setting ViewState to false is that all child controls' ViewState property will also become false. If an application does need ViewState on certain child controls, one would be forced to enable ViewState on parent controls even if the parent's ViewState is 100% unnecessary. Perhaps the best case in point where disabling ViewState would be problematic would be with the Splitter control, which is often a high level parent control. Disabling a splitter's viewstate means that no child controls can make use of ViewState. The other concern that arises with Ajax is the growing use of ControlState which can't be explicitly disabled. While ControlState may be relavent in a normal postback environment, it may be irrelavent in an Ajax app. I point this out as a possible concern since I have no idea how much ComponentArt relies on ControlState. Any ideas how Component Art can address this ViewState/ControlState/Hidden Form vars conundrum in its components in a way that does not interfere with the ViewState of child controls?
# January 18, 2007 2:29 PM

Miljan said:

Right - the current ASP.NET viewstate model essentially requires setting EnableViewState on leaf controls in the tree. If you set it on a parent control - all of its child controls will inherit that setting, and won't be able to override it, as you noticed.

We find that this isn't a huge problem in most real life situations because controls that can contain other child controls typically don't save a lot of viewstate data. For example, if you have a Splitter control with nested TreeView and Grid controls - the actual size if Splitter's viewstate is negligible when compared to that of TreeView or Grid. Therefore, you don't lose much performance-wise, if you keep Splitter's viewstate, and enable/disable it on its child controls. Same goes for MultiPage, Snap and other container-type of controls.

Your general point is valid, though. We have done quite a bit of work to optimize what's being posted back to the server by our controls. We don't use the built-in ASP.NET viewstate nor control state at all. We have a custom viewstate mechanism which is much more efficient. Explaining the details of our viewstate implementation would perhaps make for an interesting blog post in its own right...

# January 22, 2007 10:09 AM

Tod said:

I'm a bit confused by this distinction of being "True ASP.NET Ajax" components. While I'm impressed with the initial steps that you've made with the client-side API, it seems as though you still have fairly limited ability to *fully* manipulate the underlying client-side data models. Ultimately, it would seem as though I should be able to leverage ASP.NET Ajax to make web service call to retrieve the JavaScript objects that are part of my data model, then tell the ComponentArt components to re-bind to this data. Getting just the data *without re-rendering any of the component" would be maximizing the value of Ajax (at least from my perspective). However, I'm under the impression the current implementation does not support this model. Essentially, if I need to re-populate a grid, for example, I cannot just re-fetch its data via ASP.NET Ajax and re-bind it to the grid (even manually). Is the an accurate assessment of what the controls can achieve now or have I overlooked some client-side data binding features? If it's not possible, how could I best achieve the dynamic I'm after now without continually re-rendering controls when all that's changing is their data?
# January 30, 2007 4:03 PM

Miljan said:

Todd, just to clarify: ComponentArt Web.UI for ASP.NET AJAX controls are "true ASP.NET AJAX components" simply because they follow the new ASP.NET AJAX client-side component model. This component model consists of:

1. Standards for defining client-side classes that expose properties, methods, and events; and

2. Client-side base classes for component and controls: Sys.Component and Sys.UI.Control.

As for your question, I agree - it would be great if the controls supported automatic client-side binding with web services. This is definitely something we are considering for the next version.

It should be noted that this is possible even with the current version - it just requires using the client-side API to build the structure of a control (say Grid or TreeView) based on the results returned by the web service. This would produce the same user experience as automatic client-side binding with web services, but it requires some (perhaps unnecessary) JavaScript coding. It would be great if the controls just "knew" how to bind with web services.

If you need help to get this functionality going with the current version, please let me know.

# January 31, 2007 10:47 AM

mario said:

seems interesting, but if you're going to do client side scripting wouldn't it be better to use javascript libraries like jquery, yahoo UI or ext js? the MS ajax library isn't that good. give me commerical asp.net controls using yahoo ui and i'll bite. the model you describe is basically what we do at our shop with ext js.
# May 22, 2008 10:39 PM
Leave a Comment

(required) 

(required) 

(optional)

(required) 


Industry Friends
Rob Howard (Telligent)
Scott Watermasysk (Telligent)
Michael Schwartz (Ajax.NET)
Hamid Shojaee (AxoSoft)
Scott Cate (myKb.com)
Steven Smith (ASPAlliance)
Wally McClure(ASP.net Podcast)
Vassil Terziev (Telerik)
Andrew Flick (Infragistics)
Tony Lombardo (Infragistics)
Ken Cox (Freelance Author)
Lino Tadros (Falafel Software)
Robert McLaws (Interscape)
Blogs On This Site
Thoughts on web user interfaces and component development.
Ramblings of a web control developer.
Web.UI news and more
Next weeks guest: A dog and a baby dog!
I'm in your base, killing your dudes.
Absurdity is it's own message.
Musings of an ex Java developer
im in ur page, hackin ur codez
ComponentArt in the Community
... and the program ran happily ever after.

Tools / Utilities