ASP.NET 4.0 and Visual Studio 2010 Enhancements

Craig Shoemaker / Friday, December 19, 2008

Scott Hunter brings a summary of the new features coming in ASP.NET 4.0 and Visual Studio 2010. Learn why you'll never have to type runat="server" again!

Listen to the Show!

Visual Studio 2010

Visual Studio 2010 will feature expanded snippets available in the HTML editor window. These snippets will dramatically change the way you write ASPX markup. For instance, if you were to add a TextBox to the page as soon as you begin typing <asp:TextBox... the snippet will take over and add in the ID and runat attribute.

Further, consider adding a RequiredFieldValidator to the page and the amount of work required in the past to properly configure the control. With the new snippets if you add a validator directly next to the TextBox you created previously, the snippet will automatically fill out the markup for the control, populating the ControlToValidate attribute, add the id and runat attributes and position your cursor inside the ErrorMessage attribute. Hand-coding has never been so easy!

Note: You’ll never have to type runat="server" again!

Further enhancements include the ability to triple-click an expansive element like a table and the editor selects the entire table’s markup. Want to surround that table with some additional markup? Just start typing with the table selected and your markup is inserted around the selected code.

ASP.NET Innovation

The ASP.NET platform has enjoyed a number of out-of-band updates in the form of AJAX, Dynamic Data and MVC, but the core of WebForms has remained without an update for a while. The reason is that the core of WebForms is dependent on System.Web, which is loaded by IIS.

This limitation has the attention of the ASP.NET team and in the future they are looking for ways to ship out-of-band releases on the core of WebForms. Until then we wait for the official release of ASP.NET 4.0 which will include the follow updates to WebForms:

  • Control of Control IDs: ASP.NET developers will finally have total control over the ClientID that is rendered to the page for each control. For simple scenarios you simply provide the ID value and in a data-bound context you can provide the key and replacement tag. For instance if you have a control in a data-bound control and you want the key to be "lbl" then the controls will have IDs consistent with lbl1, lbl2, lbl3 and so on.

    Scott Galloway has an excellent post on the upcoming client ID changes: Way too much information on Control IDs and ASP.NET 4.0 Client Id Enhancements

  • Humble ViewState: Programming on the web often requires storing state somewhere. Using session state is prone to timeouts and can create problems in a server farm/garden environment. Many times the best place to persist data is in the HTML document itself. This logic is what drove the ASP.NET team to first implement ViewState, but an eager implementation (requiring parent controls to enable ViewState and other requirements) created bloated pages with unnecessary ViewState shoved up to the client.

    The next generation of ViewState allows for granular control over which controls require ViewState. The default template for "4.0" project may even have ViewState turned off by default.

  • Dynamic Image Support: ASP.NET will feature rich image support giving developers an easy way to manipulate and maintain images on the web. Features include an image handler base class that is responsible for converting byte arrays to images and back again. A server control that calls the handler and helps pass parameters for uniquely identifying image data as well as stamping for cache support. The cache may be configured to cache on the server, the client or in both locations. Images are manipulated by a set of transforms which include resizing and watermarking among others.

  • IQueryable BusinessLogicDataSource: This new data source will feature query blocks which expose a declarative LINQ syntax to help create dynamic where clauses to append to search queries. The SearchExpression query block allows you to easily add "starts with", "ends with" and "contains" type of constraints to a query. The RangeExpression will read minimum and maximum values to constrain the range of a field. The LINQ syntax is generated when the page data binds sends the fully-constrained to the query to the server once all the parameters are known. Attributes associated with methods on the business logic layer will tell the data source which methods to run to select, insert, update and delete objects. The data source will work against a provider to interface with Linq to SQL, Linq to Enties, POCOs and more.

Dynamic Data

The Dynamic Data updates are spread among solutions for WebForms as well as MVC. Really the term "Dynamic Data" does injustice to the features as really they are becoming simply features of existing and new controls which are really just ASP.NET data controls.

For what you think of today as Dynamic Data, expect to see further work in the following areas:

  • Entity Templates: Much like a field template, but more of a container for markup and DynamicControls which can provide templating for an entire row of data rather than a single field.

  • Database Inheritance: Provide scaffold pages that will recognize database inheritance and provide CRUD capabilities for these tables.

  • Many to Many Relationships: Scaffolding will render check box lists to allow selection of many to many related data. (David Ebbo writes about this new feature in: A ‘Many To Many’ field template for Dynamic Data)

Use the Dynamic Control in a non-List Scenario?

The team is working on strategies for using the DynamicControl in situations where you are displaying a single record (and are outside the context of a list control).

Today a single record would bind to the FormView which supports the DynamicControl. Unfortunately FormView renders as a table in order provide places to hook in CSS classes. The FormView will soon feature a mode where you can turn off markup rendering all together so only the markup you provide is rendered.

There is talk among Scott and his team of the creation of an ItemView which may be a more natural fit for this type of scenario to compliment the ListView control.

Dyanmic Data & MVC

Out of respect of the culture surrounding MVC the team has chosen to implement Dynamic Data support backward to MVC. They began with adding HTML helpers and implementations for field/entity templates and databinding logic, leaving scaffolding for the end. This will ensure that Dynamic Data will work under MVC for those who choose to opt out of the scaffolding features.

In a seemingly controversial move, the team is implementing a version of ViewState for MVC! While the implementation details differ from traditional ViewState found in WebForms the technique of state persistence in a hidden HTML element will find its way to MVC.

In the interview, Scott poses the question of how one might implement optimistic concurrency in an MVC application. You may choose to implement a time stamp field or set aside the previous values for later comparison. If you choose to review old values then the state of this object must persist somewhere. So the team is looking to support developers who may choose a number of different approaches to the same problem.

Future Dynamic Data implementations for MVC will feature a controller with virtual methods for insert, update and delete. Using virtual methods obviously means that developers will have the option to over-ride and replace any methods they see fit.