Что нового в ASP.NET 4.0. Часть 1
sashaeveОпубликовано 1.06.2009 в Разработка
Каждый желающий уже имеет возможность загрузить и ознакомится с новой версией Visual Studio 2010 Beta 1. Интерфейс новой версии полностью переписан на WPF, добавлено большое количество новых возможностей, о которых можно почитать здесь. Ну а в этой статье рассмотрим главные нововведения и улучшения в ASP.NET 4.0.
Содержание:
- Шаблоны кода (сниппеты)
- Поддержка CSS 2.1
- Динамический IntelliSense для JavaScript
- Упаковка и развертывание (Packaging and Deployment)
- Улучшенная поддержка кеширования (Output Caching)
- Новые свойства Page.MetaKeywords and Page.MetaDescription
- Автостарт web-приложений
- Улучшенная работа с ViewState
- Улучшения в ListView
- Улучшения в FormView
- Улучшенная работа с ClientID
- Сжатие данных в сессии
- 301 Permanent Redirect в ASP.NET
Шаблоны кода (сниппеты)
Сниппеты — это шаблоны кода, которые можно вставлять с помощью ключевых слов. В VS2010 представлено более 200 сниппетов для ASP.NET, HTML и JavaScript.
Примеры:
table ->
<table>
<tr>
<td>
</td>
</tr>
</table>
a ->
<a href="#">content</a>
Очень часто вместе с элементом управления TextBox необходимо также использовать валидаторы. Использовав соответствующий сниппет (например, requirefieldvalidator), VS 2010 сгенерирует нужный код для RequiredFieldValidator и автоматически подставит id текстового элемента в значение ControlToValidate. Все, что вам остается, это ввести уникальную для данного валидатора информацию.


Дополнительная информация:
Знаете ли вы, как… №106: Получить список имеющихся шаблонов кода и добавить к нему новые шаблоны?
Поддержка CSS 2.1
Visual Studio 2010 поддерживает CSS 2.1:

Дополнительная информация:
- Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification
- Microsoft подала на рассмотрение W3C тысячи дополнительных тестов CSS 2.1
Динамический IntelliSense для JavaScript
IntelliSense в Visual Studio 2010 распознает даже динамически созданные объекты:

Упаковка и развертывание (Packaging and Deployment)
Процесс развертывания web-приложения (Web Deployment) в VS 2010 можно разбить та следующие этапы:
Упаковка (Web Packaging)
VS 2010 использует MSDeploy для создания .zip файла для web-приложения (web package).
Этот архив содержит:
- метаданные
- информацию о всех настройках IIS (например, application pools, error pages)
- контент вашего web-приложения (.aspx, .ascx, .js, изображения и т.д.)
- базу SQL Server
- другие данные (файлы) — Security Certs, GAC Components, Registryи т.д.
Этот пакет может быть проинсталирован на сервере с помощью IIS Manager UI Wizard или через командную строку или API для автоматических сценариев развертывания (automated deployment scenarios).
Изменения в web.config файле (web.config transformations)
В VS 2010 представлено XML Document Transform (XDT), который позволяет изменять web.config в процессе развертывания. Изменения контролируются файлами web.debug.config, web.release.configи т.д. Имена этих файлов соответствуют конфигурации MSBuild, который вы собираетесь развернуть.
Также можно контролировать тип изменений с помощью XDT. Например, значение connectionString в web.config будет замещено значением из web.release.config (для release конфигурации):

Развертывание базы данных
VS 2010 позволяет развертывать web-приложение вместе с связанной базой данных. Предоставив connection string для вашей базы, VS 2010 автоматически создаст данные и схему и запакует их для развертывания. Также вы можете включить свои .sql скрипты и задать порядок их выполенения на сервере. В процессе инсталяции можно задать новый connection string.
1-Click Publish
VS 2010 позволяет не только развернуть ваше web-приложение, но и использовать IIS remote management service для развертывания на удаленных серверах. Visual Studio 2010 позволит создавать publish profile для вашего хостинг аккаунта или тестовых серверов, сохранять эти данные и развертывать приложения с помощью тулбара Web One Click.

Дополнительная информация:
- Видео: Web Development and Deployment with Visual Studio 2010
- Walkthrough: Creating a One-Click Publish Profile
Улучшенная поддержка кеширования (Output Caching)
В ASP.NET 4.0 стало возможным задавать провайдер для кеширования, а также создавать свои. Другими словами, можно задать хранилище, где будут храниться закешированные данные.
Хранилищем может выступать:
- память
- локальные или удаленные диски
- “облачные” хранилища
- распределенные движки для кэширования (distributed cache engines)
Для создания своего провайдера необходимо унаследоваться от нового типа System.Web.Caching.OutputCacheProvider. Кроме того, можно задавать провайдера в web.config в подсекции outputCache -> providers:
<caching>
<outputCache defaultProvider="AspNetInternalProvider">
<providers>
<add name="DiskCache"
type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>
</providers>
</outputCache>
</caching>
По умолчанию в ASP.NET 4.0 все HTTP ответы, сгенерированные страницы находятся в in-memory output cache, где AspNetInternalProvider задан в качестве defaultProvider (см. пример выше). Вы можете изменить провайдер по умолчанию.
Кроме того, вы можете выбрать разные варианты кэширования для конкретного контрола или запроса. Для первого варианта это можно сделать с помощью нового свойства providerName в OutputCache:
<%@ OutputCache Duration="60" VaryByParam="None" <strong>providerName="DiskCache"</strong> %>
Изменение провайдера для запроса выглядит немного иначе. Необходимо переопределить новый метод GetOuputCacheProviderName в Global.asax:
public override string GetOutputCacheProviderName(HttpContext context)
{
if (context.Request.Path.EndsWith("Advanced.aspx"))
return "DiskCache";
else
return base.GetOutputCacheProviderName(context);
}
Рассмотренные возможности дают большую гибкость при управлении кэширования сайта и теперь полностью зависят от фантазии нужд разработчиков.
Новые свойства Page.MetaKeywords and Page.MetaDescription
Два новых свойства Page.MetaKeywords и Page.MetaDescription предназначены для управления метаинформаций.
Значения можно задать в директиве Page:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Keywords="Meta Keywords" Description="Meta Description" %>
и программно:
if (!IsPostBack)
{
Page.MetaDescription = "Meta Description";
Page.MetaKeywords = "Meta Keywords";
}
что сгенерирует следующий HTML код:
<meta name="description" content="Meta Description" /><meta name="keywords" content="Meta Keywords" />
В данный момент свойство Description доступно в директиве Page, свойство Keywords отсутствует.
Автостарт web-приложений
Ряд web-приложений требуют загрузки больших массивов данных или инициализируют большое количество объектов перед первым запросом. Раньше необходимо было заботится об этом самостоятельно (в методе Application_Load в Global.asax).
Новая возможность под названием “автостарт” (auto-start, доступно в ASP.NET 4.0 на IIS 7.5 и Windows Server 2008 R2) позволяет управлять запуском пула приложения, инициализацией ASP.NET приложений и работой с HTTP запросами.
Для того, чтобы использовать автостарт, необходимо прописать в applicationHost.config:
<applicationPools>
<add name="MyApplicationPool" startMode="AlwaysRunning" />
</applicationPools>
Так как один пул приложения может содержать несколько web-приложений, можно их сконфигурировать:
<sites>
<site name="MySite" id="1">
<application path="/"
preloadEnabled="true"
preloadProvider="PrewarmMyCache" >
<!-- Additional content -->
</application>
</site>
</sites>
<!-- Additional content -->
<preloadProviders>
<add name="PrewarmMyCache"
type="MyNamespace.CustomInitialization, MyLibrary" />
</preloadProviders>
IIS 7.5 использует информацию с applicationHost.config и определяет какое web-приложение нуждается в автоматическом старте. Для каждого приложения помеченного как auto-start, IIS7.5 посылает запрос к ASP.NET 4.0 чтобы стартовать приложение в состояние, на протяжении которого приложение временно не принимает HTTP запросы. Когда приложение находится в этом состоянии, ASP.NET инициализирует тип заданный в атрибуте preloadProvider (см. пример выше) и затем заходит в доступную точку входа (public entry point).
Для создания управляемого auto-start типа с обязательной точкой входа необходимо реализовать интерфейс IProcessHostPreloadClient так, как это показано в примере:
public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient
{
public void Preload(string[] parameters)
{
// Perform initialization.
}
}
После того, как код инициализации выполнен в Preload методе, ваше ASP.NET приложение готово к получению и обработке запросов.
Улучшенная работа с ViewState
В ASP.NET 4.0 реализовано поддержку свойства ViewStateMode (на уровне элемента управления или страницы), который может принимать значения:
Enabled— поддержка ViewState включена (даже если родительский элемент управления имеет ViewStateMode = Disabled)Disabled— поддержка ViewState выключенаInherit— наследует значение родительского элемента управления (по умолчанию)
Работает только если EnableViewState установлено в true.
Дополнительная информация:
Улучшения в ListView
В ASP.NET 4.0 появилась возможность использования ListView без LayoutTemplate:
<asp:ListView ID="list1" runat="server">
<ItemTemplate>
<%# Eval("LastName")%>
</ItemTemplate>
</asp:ListView>
Улучшения в FormView
В FormView добавлено свойство RenderTable для управления выводом (table или div):
<asp:FormView runat="server" ID="formView1">
<ItemTemplate>
<h1><%# Eval("LastName")%></h1>
</ItemTemplate>
</asp:FormView>
выдаст такой HTML:
<table cellspacing="0" border="0" id="formView1" style="border-collapse:collapse;">
<tr>
<td colspan="2">
<h1>test</h1>
</td>
</tr>
</table>
При установке свойства RenderTable = "false" получим:
<h1>test</h1>
Улучшенная работа с ClientID
Добавлен ClientIDMode:
Legacy— по умолчанию, соответсвует старой логике;Static— использовать ID вне зависимости от контейнера;Predictable— добавляет к ID только RowClientIdSuffix;Inherit— выбирает установки родительского элемента управления.
Сжатие данных в сессии
Для этого необходимо выставить значение compressionEnabled в true:
<sessionState mode="SqlServer"
sqlConnectionString=". . ."
allowCustomSqlDatabase="true"
compressionEnabled="true"
/>
Для сжатия используется System.IO.Compression.GZipStream.
301 Permanent Redirect в ASP.NET
301 Permanent Redirect означает, что ресурс навсегда перемещен на новый URI.
В ранних версиях необходимо было использовать такой код [2]:
protected void Application_BeginRequest(object sender, EventArgs e) {
var host = Request.Url.Host;
if (host.Equals("progblog.ru", StringComparison.OrdinalIgnoreCase)) {
var newUrl = new UriBuilder(Request.Url);
newUrl.Host = "www." + host;
Response.StatusCode = 301;
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", newUrl.Uri.AbsoluteUri);
Response.End();
return;
}
}
В ASP.NET 4.0это можно сделать с помощью RedirectPermanent:
<strong>RedirectPermanent("~/path.aspx");</strong>
Дополнительная информация:
Ссылки:
- Stephen Walther – New Features of ASP.NET 4.0
- ASP.NET 4.0 Roadmap
- Visual Studio 2010 and ASP.Net 4.0 (Beta1)
- ASP.NET 4.0 and Visual Studio 2010 Web Development Beta 1 Overview
В следующей части рассмотрим новый элемент управления QueryExtender, Routing и поддержку jQuery.
Понравилась статья? Подпишись на обновления по RSS/E-mail

(16 голосов, средний: 4.44 из 5)
из более менее полезного вижу только 3,4,5
а версия 4.0 больше заслуга самого C#..
Короче нового ничего нету за последние 2 года…
2 fon
а то имена контролов типа BottomPlaceHolder_Banner1_ctl001
новый ClientID тоже весч нужная
но в принципе согласен – пользы от перехода с ASP.NET 2.0 на 4.0 гораздо меньше чем было с 1.1 на 2.0
ASP растет сейчас уже вширь а не вглубь, обрастает по периметру разными MVC / Сильверлайтами…
Основных направлений развития четыре: классический WebForms, ASP.NET MVC, ASP.NET AJAX, ASP.NET Dynamic Data + ASP.NET Features.
Ну еще не забываем, что в C# 4.0 добавился тип dynamic, с помощью которого можно переписывать JavaScript код на C# и наоборот, легко иметь доступ с Silverlight приложений к DOM модели страницы и т.д. Но это уже особенность языка, которую можно использовать в том же ASP.NET.
добавив в C# 4.0 dynamic MS сделала еще один шаг на превращение простого, строго типизированного языка в нечто похожее на незабвенный VB 6.0. Option Explicit Off и вперед… индусо-копи-пейст кодеры будут за это особо благодарны, и уже потирают руки в предвкушении проектов, которые потом никто на трезвую голову не сможет отлаживать
с установкой студии 2010 какие-то проблемы были?
Проблемы были замечены только с Windows 7 RC:
На XP и Windows Server 2003 R2 проблем не было. На Vista не пробовал.
Помедленней запускается чем Visual Studio 2008. Интерфейс был не полностью переписан на WPF, а только редактор.
2 Богдан:
Ну я бы не был бы столь категоричен насчёт dynamics. С одной стороны, Вы правы, утверждая что код может стать ужасным (если их использовать не по назначению). Сюда же можно добавить проблемы с Intellisense, которые появятся при использовании “динамиков”. С другой стороны, это облегчает работу с Reflection, со всякими COM-серверами, скриптами и т.п.
Может кто-то подскажет, не появилась ли в новой версии возможность ставить events из вида Source (asp.net web forms, имеется ввиду полностью определить обработчик, а не выбрать существующий) ? В предыдущих только из вида Design.
>>Tim
Я тоже про таке мріяв=)
Если я правильно Вас понял, то это можно сделать путем унаследования от нужного контрола и реализовав логику своего метода (например сделать свой DoubleClick для ASP.NET Button).
2Богдан
я думаю разные MVC это то что надо было делать сначала а не заниматься такими извращениями по типу ViewState, ClientID или Postback Events…
dynamic – можно, но осторожно.. если без этого трудно обойтись. Все таки типизация спасает нас от многих возможных ошибок без тестирования.
как по мне, самое удачное сочетание на сегодня для быстрой и качественной разработки: ASP.NET MVC Framework + Linq2SQL ( + Dynamic LINQ ) + jQuery (+ plugins)
спасибо за интересный обзор !
Dynamic LINQ – а це що за мара??))
Впечатлило, надо загрузить, попробовать
А почему не упомянули урл реврайтинг? Одна только эта фича для веб формз стоит многого.
Ничего этот реврайт не стоит. Пизженый кусок опен-сорсе кода http://urlrewriter.net/, который продается от имени Билла Гейтса
Тебе его никто не мешает просто импортировать в проект