Home » Articles


Sponsored links

CodeDigest Navigation

Technology News
No News Feeds available at this time.

Community News
No News Feeds available at this time.
New Features in ASP.Net 4.0 - PART 1

By Bala Murugan
Posted On Aug 29,2009
Article Rating:
Be first to rate
this article.
No of Comments: 1
Category: ASP.Net 4.0
Print this article.

New Features in ASP.Net 4.0 - PART 1


Recently, Microsoft released the newer version of its IDE Visual Studio 2010 beta 1 and .Net FX 4. Read SomaSegar’s announcement here.  The newer version of this framework includes the next version of ASP.Net, ASP.Net 4.0. You can download the Visual Studio 2010 beta 1 and .net FX 4 from here.

To know more about downloading and installing newer version of Visual Studio, please refer here.

Moving forward, we will see more about the new features and enhancements of this release in this article series.

Adding MetaKeyword and MetaDescription Using Page object

Meta keywords and description are most important components of a page when we want to make it search engine friendly. Every search engine will look for these tags to know more information of the page contents. ASP.Net 2.0 introduced a new feature where one can add these tags from the code behind using HtmlMeta class. It would have been better if we are able to do this through Page directive (Page class).  ASP.Net 4.0 added 2 new properties on the Page object to let you define the Meta keywords and Description.

Refer the code below,

protected void Page_Load(object sender, EventArgs e)


        Page.MetaKeywords = ",C#";

        Page.MetaDescription = "This is an site that hosts tutorials.";





<%@ Page Language="C#" AutoEventWireup="true" MetaKeywords=",C#" MetaDescription="This is an site that hosts tutorials" CodeFile="Default.aspx.cs" Inherits="_Default" %>


The above code will add the meta tags in the output html.


We can still do this in earlier version by defining a BasePage class. Read more here.


More Control on Controls ViewState

ViewState is one of the important factors if we start looking at improving the performance our site.  Till ASP.Net 3.x, we have EnableViewState property both at Page level and server control level to control the view state. Disabling the ViewState at page level will disable the viewstate to all the page controls. In order to improve the performance, one need to switch off the viewstate for individual control for which saving the viewstate is not necessary and hence disabling viewstate at page level is not a suitable option.  To overcome this difficulty, 4.0 added a new property to Page object and controls called ViewStateMode.

This property can take 3 values,

1.      Enabled

This value will enable the view state. This is the default value for the Page object.

2.      Disabled

This value will disable the viewstate

3.      Inherit

      This value will make the control to inherit the setting of the parent. This is the default value for a control.


With this property, we can disable the viewstate for the page and enable it for the control if only required.


Consider the following code,

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ViewStateTest.aspx.cs" ViewStateMode="Disabled" Inherits="ViewStateTest" %>

    <form id="form1" runat="server">


        <asp:Label ID="Label1" runat="server" ViewStateMode="Enabled" Text="Default Text"></asp:Label>

        <br />

         <asp:Label ID="Label2" runat="server" Text="Default Text"></asp:Label><asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />




protected void Page_Load(object sender, EventArgs e)


        if (!IsPostBack)


            Label1.Text = "Text Assigned in CodeBehind";

            Label2.Text = "Text Assigned in CodeBehind";          




When the page executed we will get the following output,

Text Assigned in CodeBehind

Text Assigned in CodeBehind


When the button is clicked,

Text Assigned in CodeBehind

Default Text


Since, the viewstate is disabled at page level (Page object) and the viewstate is enabled for “Label1” we will get the above output on Button click. Please note that if we have not set the value, the default will be “inherit” (for Label2).



If we disabled the viewstate through EnableViewState property, setting any values for ViewStateMode property will make no impact.


ClientID Generation for ASP.Net Controls

In order to access a server control from a client side script, a developer will require getting its client id. Predicting the ClientID of any control that is packed inside a parent like UserControls, MasterPage or any DataBound controls is a challenging task till day. For example, if we have 2 TextBox control inside a page that have an associated MasterPage then the ClientID will be similar to,

<input name="ctl00$ContentPlaceHolder1$TextBox2" type="text" id="ctl00_ContentPlaceHolder1_TextBox2" />

<input name="ctl00$ContentPlaceHolder1$TextBox3" type="text" id="ctl00_ContentPlaceHolder1_TextBox3" />


This is done to make the ID of the control unique in the page.

In earlier versions for, we can register a server side hidden control which can hold the ClientID of the server control to access it from client side. Read more here.

ASP.Net 4.0 addresses this difficulty by providing a new property called ClientIDMode for every controls and Page object. We can also set the property in configuration files.

This property will take the following 4 values,

1.      Static

Setting this value will make the ClientID same as the ID. It will not concatenate ID of the parent naming containers.

2.      Predictable

This will be useful to predict the ClientID of child controls in data controls. Setting this property will prevent the “ctlxxx” prefix in the ClientID. We will see more about this value later in this section.

3.      Legacy

This value will make the ClientID generation same as earlier versions of ASP.Net

4.      Inherit

            This value will make the control to inherit the parent control’s setting. This is the default value for this property.


For example,

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" ClientIDMode="Static"  AutoEventWireup="true" CodeFile="ClientIDs.aspx.cs" Inherits="Default2" %>


This setting will make all the page controls to have ClientID same as ID. For example, if we have 2 Textbox control, the output will be similar to,


<input name="ctl00$ContentPlaceHolder1$TextBox2" type="text" id="TextBox2" />

<input name="ctl00$ContentPlaceHolder1$TextBox3" type="text" id="TextBox3" />


To set this property in Web.Config file/Machine.config file,

<pages clientIDMode="Static"></pages>


The above setting should be inside <System.Web> section.


Child Control’s ClientID in Data Control

For example, if we have child controls inside a ListView control the ClientID will be generated like below by default.

<div id="ListView1_itemPlaceholderContainer" style="font-family: Verdana, Arial, Helvetica, sans-serif;">               

            <span style="background-color: #DCDCDC;color: #000000;">EmpNo:

            <span id="ListView1_ctrl0_EmpNoLabel">1</span>

            <br />


            <span id="ListView1_ctrl0_EmpNameLabel">Satheesh</span>

            <br />


            <span id="ListView1_ctrl0_AddressLabel">2n Cross</span>

            <br />


            <span id="ListView1_ctrl0_CityLabel">Bangalore</span>

            <br />


            <span id="ListView1_ctrl0_CountryLabel">India</span>

            <br />


Because the ListView control has Label control to display data in each column of every row we have SPAN tag with ClientID’s generated.


To make this ID’s predictable from clientside; we can set the ClientIDMode of the ListView control to "Predictable" and ClientIDRowSuffix to one or more number of the columns from the database.  Multiple column names should be a comma separated value. Please note that Repeater control will not support ClientIDRowSuffix property.

Consider the below,

<asp:ListView ID="ListView1" runat="server"

        DataSourceID="SqlDataSource1" ClientIDMode="Predictable" ClientIDRowSuffix="EmpName">


The above setting will remove the prefix “ctlxx” and will append the value of the column specified in ClientIDRowSuffix. This will generate the ClientID’s like,


<div id="ListView1_itemPlaceholderContainer" style="font-family: Verdana, Arial, Helvetica, sans-serif;">

            <span style="background-color: #FFF8DC;">EmpNo:

            <span id="ListView1_EmpNoLabel_Arun">2</span>

            <br />


            <span id="ListView1_EmpNameLabel_Arun">Arun</span>

            <br />


            <span id="ListView1_AddressLabel_Arun">3rd Cross</span>

            <br />


            <span id="ListView1_CityLabel_Arun">Bangalore</span>

            <br />


            <span id="ListView1_CountryLabel_Arun">US</span>

The above HTML is for single row. Next row will have the next employee’s name appended at the end.



In general, Microsoft has planned for many new features and enhancements with the new framework and the IDE. We will see more about these new features and enhancements in coming days.  Since, the current release is in beta there are chances that the above features may still have changes and improvements based on the community feedback. Download the newer version from here and you can submit your feedbacks/bugs at the visual studio support page. 

Stay tuned for Part 2!

Similar Articles
You can contribute to CodeDiget.Com:
Donate to
Article Feedback
new features of 4.0
for more details of 4.0 go through this URL: