SlideShare uma empresa Scribd logo
1 de 88
Baixar para ler offline
Старый новый
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

Mais conteúdo relacionado

Mais procurados

Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Noveo
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
оптимизация скорости загрузки страницы
оптимизация скорости загрузки страницыоптимизация скорости загрузки страницы
оптимизация скорости загрузки страницыVladimir Romanitchev
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)Ontico
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Fedor Malyshkin
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформуVadim Kruchkov
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17MoscowJS
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектовRomero78
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Alexey Kachayev
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration managementAlexander Kirillov
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''DneprCiklumEvents
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...zfconfua
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 

Mais procurados (20)

Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
оптимизация скорости загрузки страницы
оптимизация скорости загрузки страницыоптимизация скорости загрузки страницы
оптимизация скорости загрузки страницы
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформу
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектов
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration management
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
non-blocking java script
non-blocking java scriptnon-blocking java script
non-blocking java script
 

Destaque

Client Index Training Presentation
Client Index Training PresentationClient Index Training Presentation
Client Index Training PresentationFred Kilby
 
E F E C T O A N I M E
E F E C T O  A N I M EE F E C T O  A N I M E
E F E C T O A N I M Ejanmar
 
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionLearn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionIn a Rocket
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting PersonalKirsty Hulse
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your BusinessBarry Feldman
 

Destaque (7)

Medical Presentation
Medical PresentationMedical Presentation
Medical Presentation
 
Client Index Training Presentation
Client Index Training PresentationClient Index Training Presentation
Client Index Training Presentation
 
E F E C T O A N I M E
E F E C T O  A N I M EE F E C T O  A N I M E
E F E C T O A N I M E
 
Cutting edge research webinar slidespptx
Cutting edge research webinar slidespptxCutting edge research webinar slidespptx
Cutting edge research webinar slidespptx
 
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionLearn BEM: CSS Naming Convention
Learn BEM: CSS Naming Convention
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting Personal
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
 

Semelhante a The Old New ASP.NET

IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureVadim Novitskiy
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человекаNETFest
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Andrey Taritsyn
 
Что нового в ASP.NET 4
Что нового в ASP.NET 4Что нового в ASP.NET 4
Что нового в ASP.NET 4akrakovetsky
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Anton Vidishchev
 
Что нового в ASP.NET 5
Что нового в ASP.NET 5Что нового в ASP.NET 5
Что нового в ASP.NET 5Microsoft
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGAndrey Rebrov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Будущее ASP.NET
Будущее ASP.NETБудущее ASP.NET
Будущее ASP.NETGoSharp
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый стартAntonio
 
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....KazHackStan
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5Dima Dzuba
 
01 net saturday alex krakovetskiy ''asp.net scaffolding''
01 net saturday alex  krakovetskiy ''asp.net scaffolding''01 net saturday alex  krakovetskiy ''asp.net scaffolding''
01 net saturday alex krakovetskiy ''asp.net scaffolding''DneprCiklumEvents
 
Dotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffoldingDotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffoldingCiklum Ukraine
 
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureAlexander Feschenko
 

Semelhante a The Old New ASP.NET (20)

IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows Azure
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
 
Что нового в ASP.NET 4
Что нового в ASP.NET 4Что нового в ASP.NET 4
Что нового в ASP.NET 4
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3
 
Что нового в ASP.NET 5
Что нового в ASP.NET 5Что нового в ASP.NET 5
Что нового в ASP.NET 5
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Будущее ASP.NET
Будущее ASP.NETБудущее ASP.NET
Будущее ASP.NET
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
01 net saturday alex krakovetskiy ''asp.net scaffolding''
01 net saturday alex  krakovetskiy ''asp.net scaffolding''01 net saturday alex  krakovetskiy ''asp.net scaffolding''
01 net saturday alex krakovetskiy ''asp.net scaffolding''
 
Dotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffoldingDotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffolding
 
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows Azure
 

The Old New ASP.NET

  • 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
  • 7. Сравнение WebForms и MVC Page LifeCycle
  • 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
  • 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
  • 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 Необходимость перекомпиляции при выкладывании на сервер
  • 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. Будут исползоваться новые версии
  • 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>
  • 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.
  • 87. Ресурсы 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
  • 88. Ресурсы 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