Your SlideShare is downloading. ×
  • Like
The Old New ASP.NET
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.


Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

The Old New ASP.NET


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

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • thanks you
    Are you sure you want to
    Your message goes here
  • not me
    Are you sure you want to
    Your message goes here
No Downloads


Total Views
On SlideShare
From Embeds
Number of Embeds



Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

    No notes for slide


  • 1. Старый новый Microsoft ASP.NET <%= ASP.NET.Current.Version %>
  • 2. Vitaly Baum Senior Developer Personal Journal
  • 3. Термины o Microsoft ASP.NET o MVC o AJAX Library o DynamicData o WebForms
  • 4. Содержание доклада o Сравнение WebForms и MVC o Препарируем ASP.NET o Будущее с ASP.NET 4.0
  • 5. ASP.NET Framework Сравнение WebForms и MVC
  • 6. Сравнение WebForms и MVC
  • 7. Сравнение WebForms и MVC Page LifeCycle
  • 8. Page request Start Initialization Load Validation Event handling Rendering Unload
  • 9. Сравнение WebForms и MVC WebForms MVC o Тяжело тестировать o Легко тестировать* (SoC) o RAD ориентация o Контроль разметки (SEO) o Проще научится .NET o Проще научится веб- разработчику разработчику o Большое количество o Мало сторонних сторонних компонентов компонентов и решений o ViewState можно убрать o Ориентирован на со страницы хороший дизайн *SoC можно получить и в разработке для WebForms
  • 10. Сравнение WebForms и MVC WebForms MVC ASP.NET Framework .NET Framework
  • 11. Сравнение WebForms и MVC o Incoming HTTP Request o ApplicationManager o HttpApplication o Global.asax o Modules (IHttpModule) o UrlRoutingModule o IIS 7.0
  • 12. Сравнение WebForms и MVC
  • 13. Сравнение 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); }
  • 14. Сравнение WebForms и MVC o WebFormsViewEngine работает с ViewPage : System.Web.UI.Page o Сохранены все принципы o Возможна работа с MasterPage o Можно писать обработку Page LifeCycle во ViewPage 
  • 15. Сравнение WebForms и MVC Framework Solutions Platform
  • 16. Сравнение WebForms и MVC Framework Solutions Platform
  • 17. Сравнение WebForms и MVC Framework Solutions Platform
  • 18. Сравнение WebForms и MVC Framework Solutions Platform
  • 19. ASP.NET Framework Препарируем ASP.NET
  • 20. Препарируем ASP.NET o ASP.NET Framework o Providers o Modules o Handlers
  • 21. Препарируем ASP.NET o MVC Framework o ViewEngines o ControllerFactories o Filters o Routing
  • 22. Препарируем ASP.NET o Dynamic Language Support o ControlBuilder o BuildProvider
  • 23. Препарируем ASP.NET : CB o ASP.NET Framewrok строит дерево System.Web.UI.ControlBuilder для построения страницы o От ControlBuilder можно наследоваться и переопределять логику построения
  • 24. Препарируем ASP.NET : CB o Constructor Injection в UserControl
  • 25. Препарируем ASP.NET : DLR o ASP.NET on IronPython
  • 26. Препарируем ASP.NET : DLR o IronPython.dll o IronPython.Modules.dll o Microsoft.Scripting.dll o Microsoft.Scripting.Core.dll o Microsoft.Web.Scripting.dll
  • 27. Препарируем ASP.NET : DLR <httpModules> <add name="DynamicLanguageHttpModule" type="Microsoft.Web.Scripting.DynamicLanguageHttpModule"/> </httpModules>
  • 28. Препарируем 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]); } } }
  • 29. Препарируем 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=, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </languages> </microsoft.scripting>
  • 30. Препарируем ASP.NET : BP o История о BuilderProvider от David Ebbo 009/06/01/a-buildprovider-to-simplify- your-asp-net-mvc-action-links.aspx
  • 31. Препарируем 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) %>
  • 32. Препарируем ASP.NET : BP <%= Html.ActionLinkToHomeIndex("Home")%> <%= Html.ActionLinkToHomeTest("Test Link", 17, "David")%> <buildProviders> <add extension=".actions« type="MvcActionLinkHelper.MvcActionLinkBuildPro vider" /> </buildProviders>
  • 33. Препарируем ASP.NET : BP <%= Html.ActionLink<HomeController>(c => c.Index(), "Home")%> ASP.NET MVC 2 Beta Futures eleaseId=36054
  • 34. Препарируем ASP.NET : BP o 200 строк кода o Колкость работы с CodeDom o 2 комментария HACK o Несколько комментариев «К сожалению нельзя…»
  • 35. Препарируем ASP.NET : BP o Переделано на T4 o Простота реализации и сопровождения o Необходимость перекомпиляции при выкладывании на сервер
  • 36. ASP.NET Framework Будущее с ASP.NET 4.0
  • 37. ASP.NET Framework Core Services
  • 38. Будущее с ASP.NET 4.0 Web.config File Minification <?xml version="1.0"?> <configuration> <system.web> <compilation targetFramework="4.0" /> </system.web> </configuration>
  • 39. Будущее с ASP.NET 4.0 Extensible Output Caching <caching> <outputCache defaultProvider="AspNetInternalProvider"> <providers> <add name="DiskCache" type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/> </providers> </outputCache> </caching>
  • 40. Будущее с ASP.NET 4.0 Extensible Output Caching <%@ OutputCache="" Duration="60" VaryByParam="None" providerName="DiskCache" %>
  • 41. Будущее с 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); } }
  • 42. Будущее с ASP.NET 4.0 Auto-Start Web Applications IIS 7.5 applicationHost.config <applicationPools> <add name="MyApplicationPool" startMode="AlwaysRunning" /> </applicationPools>
  • 43. Будущее с 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>
  • 44. Будущее с ASP.NET 4.0 Auto-Start Web Applications public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient { public void Preload(string[] parameters) { // Perform initialization. } }
  • 45. Будущее с ASP.NET 4.0 Permanently Redirecting a Page (301) RedirectPermanent("/newpath/foroldcontent.aspx");
  • 46. Будущее с 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
  • 47. Будущее с 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=""<,>,*,%,&,:," />
  • 48. Будущее с 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) {...} }
  • 49. Будущее с ASP.NET 4.0 Object Caching Extensibility Большая популярность кеша из ASP.NET, его использование в настольных и др. приложениях. Появится новая сборка System.Runtime.Caching.dll с абстрактными классами для реализации собственных кешей, а так же реализация кеша в памяти System.Runtime.Caching.MemoryCache
  • 50. Будущее с 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); }
  • 51. Будущее с 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" />
  • 52. Будущее с 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>
  • 53. Будущее с ASP.NET 4.0 Multi-Targeting <compilation targetFramework="4.0"/> 1. Если не указано, то в AppPool под 4.0 2. Нужно обязательно указывать версию при объявлении типов в web.config 3. Разные варианты скрипты предкомпиляции 4. Будут исползоваться новые версии
  • 54. ASP.NET Framework Microsoft AJAX Library
  • 55. Будущее с ASP.NET 4.0 Imperative Syntax <script type="text/javascript"> Sys.create.watermark("#Name", { WatermarkText: "Add name here..." }); </script> Работает IntelliSense
  • 56. Будущее с ASP.NET 4.0 Script Loader • Автоматически подгружает ресурсы • Проверяет, чтобы скрипт был загружен единожды • Параллельная загрузка скриптов • Ленивая загрузка скриптов • Работает так же со сторонними библиотеками
  • 57. Будущее с 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>
  • 58. Будущее с ASP.NET 4.0 Script Loader o MicrosoftAjaxComponentModel.js o MicrosoftAjaxCore.js o MicrosoftAjaxGlobalization.js o ACTCommon.js o ACTExtenderBase.js o ACTWatermark.js
  • 59. Будущее с ASP.NET 4.0 Content Delivery Network <script src=""></script>
  • 60. Будущее с ASP.NET 4.0 Client Data Access o Client data controls o Client templates o Client data context
  • 61. Будущее с 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>
  • 62. Будущее с ASP.NET 4.0 Client Data Access : DataView <h1>Movies</h1> <ul id="moviesView"> <li>{{Title}} - {{Director}}</li> </ul>
  • 63. Будущее с 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.
  • 64. Будущее с ASP.NET 4.0 Client DataContext, AdoNetDataContext Похожи на: o LINQ to SQL DataContext o Entity Framework ObjectContext Поддерживают: o Чтение и запись o Поддерживает сложные связи и ассоциации
  • 65. Будущее с 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>
  • 66. ASP.NET Framework WebForms
  • 67. Будущее с 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" %>
  • 68. Будущее с 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
  • 69. Будущее с ASP.NET 4.0 Browser Capabilities Providers o Добавлены новые описания o Переопределяемый провайдер
  • 70. Будущее с ASP.NET 4.0 Routing http://website/products.aspx?categoryid=12 http://website/products/software o Базовый класс: PageRouteHandler o Свойства: Page.RouteData
  • 71. Будущее с 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"); }
  • 72. Будущее с ASP.NET 4.0 Routing protected void Page_Load(object sender, EventArgs e) { string searchterm = Page.RouteData.Values["searchterm"] as string; label1.Text = searchterm; }
  • 73. Будущее с 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%>" />
  • 74. Будущее с 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>
  • 75. Будущее с ASP.NET 4.0 ClientID У всех control’ов (и у Page) свойство ClientIDMode: o AutoID – «старая» версия o Static – «неизменяемый» ID o Predictable – работает в паре с ClientIDRowSuffix o Inherit – наследуется от родителя
  • 76. Будущее с 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?
  • 77. Будущее с ASP.NET 4.0 Persisting Row Selection in Data Controls <asp:GridView id="GridView2" runat="server" EnablePersistedSelection="true"> </asp:GridView> Сохраняет выделение при пейджинге
  • 78. Будущее с ASP.NET 4.0 ASP.NET Chart Control
  • 79. Будущее с 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
  • 80. Будущее с 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>
  • 81. Будущее с 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>
  • 82. Будущее с 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>
  • 83. Будущее с 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; }
  • 84. Будущее с ASP.NET 4.0 Html Encoded Code Expressions <%: expression %> <%= HttpUtility.HtmlEncode(expression) %> <%: Request["UserInput"] %> IHtmlString <%: new HtmlString("<strong>HTML that is not encoded</strong>") %>
  • 85. Будущее с ASP.NET 4.0 VS: Project Template Changes o Empty Web Application Template o Web Application & Web Site Project Templates
  • 86. Ресурсы o In depth: The ASP.NET MVC Pipeline et-mvc-pipeline-lifecycle/ o Comparing Web Forms And ASP.NET MVC us/magazine/dd942833.aspx o ASP.NET Application Life Cycle Overview for IIS 7.0 us/library/bb470252(VS.100).aspx
  • 87. Ресурсы o ASP.NET on CodePlex o ASP.NET 4 and Visual Studio 2010 Web Development Beta 2 Overview pnet4/default.aspx