The Old New ASP.NET
Upcoming SlideShare
Loading in...5
×
 

The Old New ASP.NET

on

  • 4,276 views

This slides from ALT.NET meeting about ASP.NET at Saint-Petersburg 03/12/09

This slides from ALT.NET meeting about ASP.NET at Saint-Petersburg 03/12/09

Statistics

Views

Total Views
4,276
Views on SlideShare
4,259
Embed Views
17

Actions

Likes
3
Downloads
39
Comments
2

3 Embeds 17

http://localhost 10
http://www.slideshare.net 5
http://www.slideee.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • thanks you
    Are you sure you want to
    Your message goes here
    Processing…
  • not me
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

The Old New ASP.NET The Old New ASP.NET Presentation Transcript

  • Старый новый Microsoft ASP.NET <%= ASP.NET.Current.Version %>
  • Vitaly Baum Senior Developer http://conteq.ru Personal Journal http://butaji.ru
  • Термины o Microsoft ASP.NET o MVC o AJAX Library o DynamicData o WebForms
  • Содержание доклада o Сравнение WebForms и MVC o Препарируем ASP.NET o Будущее с ASP.NET 4.0
  • ASP.NET Framework Сравнение WebForms и MVC
  • Сравнение WebForms и MVC
  • Сравнение WebForms и MVC Page LifeCycle
  • Page request Start Initialization Load Validation Event handling Rendering Unload
  • Сравнение WebForms и MVC WebForms MVC o Тяжело тестировать o Легко тестировать* (SoC) o RAD ориентация o Контроль разметки (SEO) o Проще научится .NET o Проще научится веб- разработчику разработчику o Большое количество o Мало сторонних сторонних компонентов компонентов и решений o ViewState можно убрать o Ориентирован на со страницы хороший дизайн *SoC можно получить и в разработке для WebForms
  • Сравнение WebForms и MVC WebForms MVC ASP.NET Framework .NET Framework
  • Сравнение WebForms и MVC o Incoming HTTP Request o ApplicationManager o HttpApplication o Global.asax o Modules (IHttpModule) o UrlRoutingModule o IIS 7.0
  • Сравнение WebForms и MVC
  • Сравнение WebForms и MVC public interface IViewEngine { // Methods ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache); ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache); void ReleaseView(ControllerContext controllerContext, IView view); }
  • Сравнение WebForms и MVC o WebFormsViewEngine работает с ViewPage : System.Web.UI.Page o Сохранены все принципы o Возможна работа с MasterPage o Можно писать обработку Page LifeCycle во ViewPage 
  • Сравнение WebForms и MVC Framework Solutions Platform
  • Сравнение WebForms и MVC Framework Solutions Platform
  • Сравнение WebForms и MVC Framework Solutions Platform
  • Сравнение WebForms и MVC Framework Solutions Platform
  • ASP.NET Framework Препарируем ASP.NET
  • Препарируем ASP.NET o ASP.NET Framework o Providers o Modules o Handlers
  • Препарируем ASP.NET o MVC Framework o ViewEngines o ControllerFactories o Filters o Routing
  • Препарируем ASP.NET o Dynamic Language Support o ControlBuilder o BuildProvider
  • Препарируем ASP.NET : CB o ASP.NET Framewrok строит дерево System.Web.UI.ControlBuilder для построения страницы o От ControlBuilder можно наследоваться и переопределять логику построения
  • Препарируем ASP.NET : CB o Constructor Injection в UserControl
  • Препарируем ASP.NET : DLR o ASP.NET on IronPython
  • Препарируем ASP.NET : DLR o IronPython.dll o IronPython.Modules.dll o Microsoft.Scripting.dll o Microsoft.Scripting.Core.dll o Microsoft.Web.Scripting.dll
  • Препарируем ASP.NET : DLR <httpModules> <add name="DynamicLanguageHttpModule" type="Microsoft.Web.Scripting.DynamicLanguageHttpModule"/> </httpModules>
  • Препарируем ASP.NET : DLR Internal class DynamicLanguageHttpModule : IHttpModule, IBuildProvider { private class GlobalAsaxBuildResult : TypeWithEventsBuildResult { private void CallFunction(ScriptEngine engine, DynamicFunction f) { f.Invoke(engine, new object[0]); } } }
  • Препарируем ASP.NET : DLR <microsoft.scripting debugMode="true"> <languages> <language names="IronPython;Python;py" extensions=".py" displayName="IronPython 2.0 Beta" type="IronPython.Runtime.PythonContext, IronPython, Version=2.0.0.5000, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </languages> </microsoft.scripting>
  • Препарируем ASP.NET : BP o История о BuilderProvider от David Ebbo http://blogs.msdn.com/davidebb/archive/2 009/06/01/a-buildprovider-to-simplify- your-asp-net-mvc-action-links.aspx
  • Препарируем ASP.NET : BP <%= Html.ActionLink("Home", "Index", "Home")%> public ActionResult Test(int id, string name) { return View(); } <%= Html.ActionLink("Test Link", "Test", "Home", new { id = 17, name = "David" }, null) %>
  • Препарируем ASP.NET : BP <%= Html.ActionLinkToHomeIndex("Home")%> <%= Html.ActionLinkToHomeTest("Test Link", 17, "David")%> <buildProviders> <add extension=".actions« type="MvcActionLinkHelper.MvcActionLinkBuildPro vider" /> </buildProviders>
  • Препарируем ASP.NET : BP <%= Html.ActionLink<HomeController>(c => c.Index(), "Home")%> ASP.NET MVC 2 Beta Futures http://aspnet.codeplex.com/Release/ProjectReleases.aspx?R eleaseId=36054
  • Препарируем ASP.NET : BP o 200 строк кода o Колкость работы с CodeDom o 2 комментария HACK o Несколько комментариев «К сожалению нельзя…»
  • Препарируем ASP.NET : BP o Переделано на T4 o Простота реализации и сопровождения o Необходимость перекомпиляции при выкладывании на сервер
  • ASP.NET Framework Будущее с ASP.NET 4.0
  • ASP.NET Framework Core Services
  • Будущее с ASP.NET 4.0 Web.config File Minification <?xml version="1.0"?> <configuration> <system.web> <compilation targetFramework="4.0" /> </system.web> </configuration>
  • Будущее с ASP.NET 4.0 Extensible Output Caching <caching> <outputCache defaultProvider="AspNetInternalProvider"> <providers> <add name="DiskCache" type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/> </providers> </outputCache> </caching>
  • Будущее с ASP.NET 4.0 Extensible Output Caching <%@ OutputCache="" Duration="60" VaryByParam="None" providerName="DiskCache" %>
  • Будущее с ASP.NET 4.0 Extensible Output Caching public class HttpApplication : … { public override string GetOutputCacheProviderName(HttpContext context) { if (context.Request.Path.EndsWith("Advanced.aspx")) return "DiskCache"; else return base.GetOutputCacheProviderName(context); } }
  • Будущее с ASP.NET 4.0 Auto-Start Web Applications IIS 7.5 applicationHost.config <applicationPools> <add name="MyApplicationPool" startMode="AlwaysRunning" /> </applicationPools>
  • Будущее с ASP.NET 4.0 Auto-Start Web Applications <sites> <site name="MySite" id="1"> <application path="/" serviceAutoStartEnabled="true" serviceAutoStartProvider="PrewarmMyCache" > <!-- Additional content --> </application> </site> </sites> <serviceAutoStartProviders> <add name="PrewarmMyCache" type="MyNamespace.CustomInitialization, MyLibrary" /> </serviceAutoStartProviders>
  • Будущее с ASP.NET 4.0 Auto-Start Web Applications public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient { public void Preload(string[] parameters) { // Perform initialization. } }
  • Будущее с ASP.NET 4.0 Permanently Redirecting a Page (301) RedirectPermanent("/newpath/foroldcontent.aspx");
  • Будущее с ASP.NET 4.0 The Incredible Shrinking Session State <sessionState mode="SqlServer" sqlConnectionString="data source=dbserver;Initial Catalog=aspnetstate" allowCustomSqlDatabase="true" compressionEnabled="true"/> Compression with System.IO.Compression.GZipStream
  • Будущее с ASP.NET 4.0 Expanding the Range of Allowable URLs In previous versions 260 characters (based on NTFS) <httpRuntime maxRequestPathLength="260" maxQueryStringLength="2048" /> <httpRuntime requestPathInvalidChars=""<,>,*,%,&,:," />
  • Будущее с ASP.NET 4.0 Extensible Request Validation <httpRuntime requestValidationType="Samples.MyValidator, Samples" /> public class CustomRequestValidation : RequestValidator { protected override bool IsValidRequestString( HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex) {...} }
  • Будущее с ASP.NET 4.0 Object Caching Extensibility Большая популярность кеша из ASP.NET, его использование в настольных и др. приложениях. Появится новая сборка System.Runtime.Caching.dll с абстрактными классами для реализации собственных кешей, а так же реализация кеша в памяти System.Runtime.Caching.MemoryCache
  • Будущее с ASP.NET 4.0 Object Caching Extensibility private void btnGet_Click(object sender, EventArgs e) { ObjectCache cache = MemoryCache.Default; fileContents = cache["filecontents"] as string; if (fileContents == null) { CacheItemPolicy policy = new CacheItemPolicy(); List<string> filePaths = new List<string>(); filePaths.Add("c:data.txt"); policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths)); fileContents = File.ReadAllText("c:data.txt"); cache.Set("filecontents", fileContents, policy); } MessageBox.Show(fileContents); }
  • Будущее с ASP.NET 4.0 HTML, URL, and HTTP Header Encoding System.Web.Util.HttpEncoder System.Web.HttpUtility System.Web.HttpServerUtility <httpRuntime encoderType="Samples.MyCustomEnco der, Samples" />
  • Будущее с ASP.NET 4.0 Performance Monitoring for Individual Applications in a Single Worker Process <?xml version="1.0" encoding="UTF-8" ?> <configuration> <runtime> <appDomainResourceMonitoring enabled="true"/> </runtime> </configuration>
  • Будущее с ASP.NET 4.0 Multi-Targeting <compilation targetFramework="4.0"/> 1. Если не указано, то в AppPool под 4.0 2. Нужно обязательно указывать версию при объявлении типов в web.config 3. Разные варианты скрипты предкомпиляции 4. Будут исползоваться новые версии
  • ASP.NET Framework Microsoft AJAX Library
  • Будущее с ASP.NET 4.0 Imperative Syntax <script type="text/javascript"> Sys.create.watermark("#Name", { WatermarkText: "Add name here..." }); </script> Работает IntelliSense
  • Будущее с ASP.NET 4.0 Script Loader • Автоматически подгружает ресурсы • Проверяет, чтобы скрипт был загружен единожды • Параллельная загрузка скриптов • Ленивая загрузка скриптов • Работает так же со сторонними библиотеками
  • Будущее с ASP.NET 4.0 Script Loader <script src="../Scripts/MicrosoftAjax/start.js" type="text/javascript"></script> <script src="../Scripts/ACT/ACTRegisterExtended.js" type="text/javascript"></script> <script type="text/javascript"> Sys.require(Sys.components.watermark, function() { Sys.create.watermark("#Name", { WatermarkText: "Add name here..." }); }); </script>
  • Будущее с ASP.NET 4.0 Script Loader o MicrosoftAjaxComponentModel.js o MicrosoftAjaxCore.js o MicrosoftAjaxGlobalization.js o ACTCommon.js o ACTExtenderBase.js o ACTWatermark.js
  • Будущее с ASP.NET 4.0 Content Delivery Network <script src="ajax.microsoft.com/ajax/0910/start.js"></script> http://www.asp.net/ajaxlibrary/cdn
  • Будущее с ASP.NET 4.0 Client Data Access o Client data controls o Client templates o Client data context
  • Будущее с ASP.NET 4.0 Client Data Access : DataView <script src="Scripts/MicrosoftAjax/start.js" type="text/javascript"></script> <script type="text/javascript"> Sys.require([Sys.components.dataView, Sys.components.dataContext], function() { Sys.create.dataView("#moviesView", { dataProvider: "Services/MovieService.svc", fetchOperation: "GetMovies", autoFetch: true } ); }); </script>
  • Будущее с ASP.NET 4.0 Client Data Access : DataView <h1>Movies</h1> <ul id="moviesView"> <li>{{Title}} - {{Director}}</li> </ul>
  • Будущее с ASP.NET 4.0 Client Data Access : DataView o ASP.NET (.asmx) Web services. o WCF Web services. o ADO.NET Data Services. o Anything that returns JSON-formatted data.
  • Будущее с ASP.NET 4.0 Client DataContext, AdoNetDataContext Похожи на: o LINQ to SQL DataContext o Entity Framework ObjectContext Поддерживают: o Чтение и запись o Поддерживает сложные связи и ассоциации
  • Будущее с ASP.NET 4.0 jQuery Integration <script src="Scripts/MicrosoftAjax/start.js" type="text/javascript"></script> <script src="Scripts/ACT/ACTRegisterExtended.js" type="text/javascript"></script> <script type="text/javascript"> Sys.require([Sys.components.watermark, Sys.scripts.jQuery], function() { $(".required") .watermark({ WatermarkText: "Add something here..." }) .css({ backgroundColor: "red", color: "white" }); }); </script>
  • ASP.NET Framework WebForms
  • Будущее с ASP.NET 4.0 MetaTags <head id="Head1" runat="server"> <title>Untitled Page</title> <meta name="keywords" content="These, are, my, keywords" /> <meta name="description" content="This is the description of my page" /> </head> Page.MetaKeywords, Page.MetaDescription <%@ Page Language="C#" Keywords="These, are, my, keywords" Description="This is a description" %>
  • Будущее с ASP.NET 4.0 ViewStateMode <asp:PlaceHolder ID="PlaceHolder1" runat="server" ViewStateMode="Disabled"> Disabled: <asp:Label ID="label1" runat="server" Text="[DeclaredValue]" /><br /> <asp:PlaceHolder ID="PlaceHolder2" runat="server" ViewStateMode="Enabled"> Enabled: <asp:Label ID="label2" runat="server" Text="[DeclaredValue]" /> </asp:PlaceHolder> </asp:PlaceHolder> Разница с EnableViewState
  • Будущее с ASP.NET 4.0 Browser Capabilities Providers o Добавлены новые описания o Переопределяемый провайдер
  • Будущее с ASP.NET 4.0 Routing http://website/products.aspx?categoryid=12 http://website/products/software o Базовый класс: PageRouteHandler o Свойства: Page.RouteData
  • Будущее с ASP.NET 4.0 Routing public class Global : System.Web.HttpApplication { void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapPageRoute("SearchRoute", "search/{searchterm}", "~/search.aspx"); RouteTable.Routes.MapPageRoute("UserRoute", "users/{username}", "~/users.aspx"); }
  • Будущее с ASP.NET 4.0 Routing protected void Page_Load(object sender, EventArgs e) { string searchterm = Page.RouteData.Values["searchterm"] as string; label1.Text = searchterm; }
  • Будущее с ASP.NET 4.0 Routing Expression Builders: RouteUrl, RouteValue <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="<%$RouteUrl:SearchTerm=scott%>">Search for Scott</asp:HyperLink> <asp:Label ID="Label1" runat="server" Text="<%$RouteValue:SearchTerm%>" />
  • Будущее с ASP.NET 4.0 Routing <asp:sqldatasource id="SqlDataSource1" runat="server" connectionstring="<%$ ConnectionStrings:MyNorthwind %>" selectcommand="SELECT CompanyName,ShipperID FROM Shippers where CompanyName=@companyname" <selectparameters> <asp:routeparameter name="companyname" RouteKey="searchterm" /> </selectparameters> </asp:sqldatasource>
  • Будущее с ASP.NET 4.0 ClientID У всех control’ов (и у Page) свойство ClientIDMode: o AutoID – «старая» версия o Static – «неизменяемый» ID o Predictable – работает в паре с ClientIDRowSuffix o Inherit – наследуется от родителя
  • Будущее с ASP.NET 4.0 ClientID <tc:NamingPanel runat="server" ID="ParentPanel" ClientIDMode="Static"> <tc:NamingPanel runat="server" ID="NamingPanel1" ClientIDMode="Predictable"> <asp:TextBox ID="TextBox1" runat="server" Text="Hello!"></asp:TextBox> </tc:NamingPanel> </tc:NamingPanel> <div id="ParentPanel"> <div id="ParentPanel_NamingPanel1"> <input name="ctl00$ContentPlaceHolder1$ParentPanel$NamingPanel1$TextBox1" type="text" value="Hello!" id="ParentPanel_NamingPanel1_TextBox1" /> </div> * Вопрос: для чего используется id, а для чего name?
  • Будущее с ASP.NET 4.0 Persisting Row Selection in Data Controls <asp:GridView id="GridView2" runat="server" EnablePersistedSelection="true"> </asp:GridView> Сохраняет выделение при пейджинге
  • Будущее с ASP.NET 4.0 ASP.NET Chart Control
  • Будущее с ASP.NET 4.0 QueryExtender Control : Search <asp:LinqDataSource ID="dataSource" runat="server"> TableName="Products"> </asp:LinqDataSource> <asp:QueryExtender TargetControlID="dataSource" runat="server"> <asp:SearchExpression DataFields="ProductName, Supplier.CompanyName" SearchType="StartsWith"> <asp:ControlParameter ControlID="TextBoxSearch" /> </asp:SearchExpression> </asp:QueryExtender> LinqDataSource EntityDataSource
  • Будущее с ASP.NET 4.0 QueryExtender Control : Range <asp:LinqDataSource ID="dataSource" runat="server"> TableName="Products"> </asp:LinqDataSource> <asp:QueryExtender TargetControlID="dataSource" runat="server"> <asp:RangeExpression DataField="UnitPrice" MinType="Inclusive" MaxType="Inclusive"> <asp:ControlParameter ControlID="TextBoxFrom" /> <asp:ControlParameter ControlID="TexBoxTo" /> </asp:RangeExpression> </asp:QueryExtender>
  • Будущее с ASP.NET 4.0 QueryExtender Control : PropertyExpression <asp:LinqDataSource ID="dataSource" runat="server" TableName="Products"> </asp:LinqDataSource> <asp:QueryExtender TargetControlID="dataSource" runat="server"> <asp:PropertyExpression> <asp:ControlParameter ControlID="CheckBoxDiscontinued" Name="Discontinued" /> </asp:PropertyExpression> </asp:QueryExtender>
  • Будущее с ASP.NET 4.0 QueryExtender Control : CustomExpression <asp:LinqDataSource ID="dataSource" runat="server" TableName="Products"> </asp:LinqDataSource> <asp:QueryExtender TargetControlID="dataSource" runat="server"> <asp:CustomExpression OnQuerying="FilterProducts" /> </asp:QueryExtender>
  • Будущее с ASP.NET 4.0 QueryExtender Control : CustomExpression protected void FilterProducts(object sender, CustomExpressionEventArgs e) { e.Query = from p in e.Query.Cast<Product>() where p.UnitPrice >= 10 select p; }
  • Будущее с ASP.NET 4.0 Html Encoded Code Expressions <%: expression %> <%= HttpUtility.HtmlEncode(expression) %> <%: Request["UserInput"] %> IHtmlString <%: new HtmlString("<strong>HTML that is not encoded</strong>") %>
  • Будущее с ASP.NET 4.0 VS: Project Template Changes o Empty Web Application Template o Web Application & Web Site Project Templates
  • Ресурсы o In depth: The ASP.NET MVC Pipeline http://blog.codeville.net/2007/11/20/aspn et-mvc-pipeline-lifecycle/ o Comparing Web Forms And ASP.NET MVC http://msdn.microsoft.com/en- us/magazine/dd942833.aspx o ASP.NET Application Life Cycle Overview for IIS 7.0 http://msdn.microsoft.com/en- us/library/bb470252(VS.100).aspx
  • Ресурсы o ASP.NET on CodePlex http://aspnet.codeplex.com/ o ASP.NET 4 and Visual Studio 2010 Web Development Beta 2 Overview http://www.asp.net/LEARN/whitepapers/as pnet4/default.aspx