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

Like this? Share it with your network

Share

The Old New ASP.NET

  • 4,349 views
Uploaded on

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

More 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

Views

Total Views
4,349
On Slideshare
4,332
From Embeds
17
Number of Embeds
3

Actions

Shares
Downloads
41
Comments
2
Likes
3

Embeds 17

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

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Старый новый Microsoft ASP.NET <%= ASP.NET.Current.Version %>
  • 2. Vitaly Baum Senior Developer http://conteq.ru Personal Journal http://butaji.ru
  • 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=2.0.0.5000, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </languages> </microsoft.scripting>
  • 30. Препарируем 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
  • 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 http://aspnet.codeplex.com/Release/ProjectReleases.aspx?R 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="ajax.microsoft.com/ajax/0910/start.js"></script> http://www.asp.net/ajaxlibrary/cdn
  • 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 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
  • 87. Ресурсы 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