<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Блог Скотта Гатри (перевод)</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/ruscottgu/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/ruscottgu/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:25:40 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Razor – новый механизм визуализации в ASP.NET</title>
      <link>https://docs.microsoft.com/archive/blogs/ruscottgu/razor</link>
      <pubDate>Tue, 20 Jul 2010 08:05:11 GMT</pubDate>
      <dc:creator><![CDATA[Russian MSDN]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ruscottgu/2010/07/20/razor/</guid>
      <description><![CDATA[&#160;    Одним из проектов, над которым работала моя команда, был новый механизм визуализации (view...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p><a href="https://msug.vn.ua/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dev/MRK37G_5F00_70052062.jpg"></a></p>  <p>Одним из проектов, над которым работала моя команда, был новый механизм визуализации (view engine) для ASP.NET.</p>  <p>В платформе ASP.NET MVC всегда поддерживалась концепция «механизма визуализации», который представляет собой заменяемые модули, реализующие выбор различного синтаксиса шаблона. Сегодня, стандартный механизм визуализации для ASP.NET MVC использует аналогичные файлы, что и ASP.NET Web Forms – .aspx/.ascx/.master. Существуют и другие популярные механизмы визуализации для ASP.NET MVC – <a href="https://sparkviewengine.com/">Spark</a> и <a href="https://code.google.com/p/nhaml/">NHaml</a>.</p>  <p>Новый движок, над которым мы работаем, оптимизирован под генерацию HTML-кода, фокусируясь на коде шаблона. Кодовое имя для данного движка – «Razor», первая бета-версия будет доступна уже скоро.</p>  <h6>Цели разработки</h6>  <p>Во время разработки прототипа и оценки Razor, было выделено несколько основных целей:</p>  <p><b>Компактный</b><b>, </b><b>выразительный</b><b> </b><b>и</b><b> </b><b>гибкий</b>. Razor уменьшает «нагрузку на клавиатуру» при редактировании файла, обеспечивает быстрый и гибкий процесс программирования. В отличие от большинства синтаксиса шаблонов, вам не нужно прерывать написание кода, чтобы явно определить серверные блоки кода в HTML. Анализатор достаточно умен, для того чтобы сделать это за вас, основываясь на коде. Вы получаете компактный и выразительный синтаксис, который легко и весело набирать.</p>  <p><b>Простота освоения</b>. Razor прост в освоении и позволяет за короткий срок стать более продуктивным с минимальным количеством усилий. Вы используете все существующие навыки языка программирования и HTML.</p>  <p><b>Не новый язык</b>. Мы сознательно выбрали путь, который не основывается на новом императивном языке для Razor. Вместо этого, мы позволили разработчикам использовать уже существующие навыки работы с C#/VB(или другим языком) и предоставили синтаксис разметки шаблона, который обеспечивает потрясающий процесс построения HTML, оставляя выбор языка за вами. </p>  <p><b>Работает в любом текстовом редакторе.</b> Razor не требует определенного инструмента для редактирования и позволяет быть продуктивным в любом старом текстовом редакторе (даже в блокноте прекрасно работает) </p>  <p><b>Поддержка Intellisense</b>. Несмотря на то, что Razor разрабатывался с учетом отсутствия привязки к определенному инструменту или редактору кода, у него будет отличная поддержка в Visual Studio. Visual Studio 2010 и Visual Web Developer 2010 скоро получат обновления для Intellisense. </p>  <p><b>Возможность модульного тестирования</b>. Новая реализация механизма рендеринга будет поддерживать возможность модульного тестирования (без контроллера или веб-сервера, можно размещать в любом проекте модульного тестирования – не требуются специальные <a href="https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BC%D0%B5%D0%BD_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F">домены приложений</a>).</p>  <p>Последние несколько месяцев мы занимались разработкой приложения, используя данную технологию. Провели исследования юзабилити с различными добровольцами, включая группы не .NET-разработчиков. Отзывы от людей были превосходными.</p>  <h5>Выбор и гибкость</h5>  <p>Самой прекрасной возможностью у ASP.NET, является замена буквально любой части кода. Если определенный механизм не удовлетворяет вашим потребностям, можно легко заменить его собственной реализацией.</p>  <p>Со следующей версией у ASP.NET MVC появится новое диалоговое окно «Add-&gt;View», которое позволит вам выбрать синтаксис для нового файла шаблона представления. Оно позволит легко выбирать любой доступный механизм рендеринга, установленный на локальной машине:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/5078.image_1BC93624.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/5078.image_5F00_1BC93624.png" width="443" height="440" /> </p>  <p>Razor будет присутствовать в списке, так как он будет интегрирован непосредственно в ASP.NET MVC. Все вспомогательные методы и модели программирования будут доступны, как в Razor, так и в механизме рендеринга .ASPX.</p>  <p>У вас будет возможность сочетать и сравнивать шаблоны представлений, написанные с использованием различных механизмов в рамках одного приложения или сайта. Например, вы можете создать одни представления, используя .aspx, другие с .cshtml или .vbhtml (расширения Razor-файлов, для C# и VB соответственно), третьи со Spark или NHaml. Мало того, у вас шаблон представления на одном механизме может частично использовать представление, написанное для другого механизма. Вы капитан и выбираете то, что нужно.</p>  <h5>Hello World и Razor</h5>  <p>Razor позволяет начать со статического HTML-кода (или любого текстового содержимого), который постепенно становится динамическим, путем добавления серверного кода. Одна из основных целей проектирования Razor’a была предоставить гибкий процесс кодирования и позволить быстро интегрировать серверный код в HTML-разметку с минимумом усилий.</p>  <p>Чтобы увидеть простой пример, давайте создадим пример “hello world” и выведем следующее сообщение:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/7142.image_0B6DBE6B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/7142.image_5F00_0B6DBE6B.png" width="566" height="293" /> </p>  <h6>Как это выглядит при использовании .ASPX-кода</h6>  <p>Если мы собираемся построить, представленный выше пример, используя ASP.NET и существующую разметку синтаксиса .ASPX, нам потребуется использовать &lt;%= %&gt; блоки, для определения областей кода внутри HTML-разметки:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/2451.image_5BEF29D1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/2451.image_5F00_5BEF29D1.png" width="598" height="184" /> </p>  <p>Хотелось бы поделится одним наблюдением – каждая область кода, требует пяти символов (&lt;%= %&gt;) для начала и конца последовательности. Некоторые из данных символов (в особенности клавиша %, которая на большинстве клавиатур располагается в верхней центральной части) не совсем просто набирать.</p>  <h6>Как это выглядит с Razor-синтаксисом</h6>  <p>Обратите внимание на начало области кода в Razor, где используется символ @. В отличии от &lt;% %&gt;, Razor не требует явно закрывать область кода:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/6180.image_330414C8.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/6180.image_5F00_330414C8.png" width="544" height="198" /> </p>  <p>Анализатор Razor умеет семантически распознавать C#/VB в областях кода, вот почему нам не нужно явно закрывать блок кода. Razor может определить вышеуказанные утверждения, как самостоятельные области кода и неявно закрыть их для нас.</p>  <p>Даже в таком тривиальном примере мы уберегли себя от 12 лишний нажатий клавиш, которые нам пришлось бы делать раньше. Набрать символ @ на клавиатуре гораздо проще, чем символ %.</p>  <h6>Циклы и вложенный HTML</h6>  <p>Давайте рассмотрим другой случай, когда вам нужно вывести список продуктов (и цену напротив каждого):</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/0714.image_2314D004.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/0714.image_5F00_2314D004.png" width="579" height="239" /> </p>  <h6></h6>  <h6>Создаем пример с .ASPX</h6>  <p>Если мы собираемся реализовать пример, используя ASP.NET и существующую разметку синтаксиса .ASPX, нам потребуется код, который будет динамически генерировать &lt;ul&gt;-список с элементами &lt;li&gt; для каждого продукта:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/2870.image_7547073E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/2870.image_5F00_7547073E.png" width="381" height="147" /> </p>  <h6>Создаем пример с Razor</h6>  <p>Ниже показано, как сгенерировать эквивалентное представление, используя Razor:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/7178.image_3EF5DF2F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/7178.image_5F00_3EF5DF2F.png" width="318" height="152" /> </p>  <p>Обратите внимание, что мы начали цикл foreach, используя символ @, а далее разместили строку HTML-содержимого с блоками кода внутри. Так как анализатор Razor понимает семантику C# в наших блоках, он может определить, что содержимое &lt;li&gt; должно быть внутри foreach и рассматривает его, как содержимое, которое должно быть зациклено. Он также распознает закрывающую скобку «}» и останавливает foreach.</p>  <p>Razor также достаточно умен, чтобы распознать выражения @p.Name и @p.Price внутри элемента &lt;li&gt; как серверный код и выполнить его для каждого прохода цикла. Обратите внимание, Razor автоматически закрывает области кода @p.Name и @p.Price основываясь на совместном использовании HTML и кода.</p>  <p>Возможность писать код таким образом, не добавляя множества открывающих и закрывающих меток по всему шаблону делает весь процесс разработки реально быстрым.</p>  <h6>Блоки if и многострочные выражения</h6>  <p>Ниже представлено несколько примеров распространенных ситуаций:</p>  <h6>If выражения</h6>  <p>Как и в примере с foreach, вы можете располагать содержимое внутри if выражений (или других языковых структур C# или VB), при этом явно не указывая начало/конец областей кода. Например:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/3365.image_7D7B2CD5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/3365.image_5F00_7D7B2CD5.png" width="318" height="152" /> </p>  <h6>Многострочные выражения</h6>  <p>Вы можете обозначать несколько строчек кода обернув их в блок @{ <i>код</i> } следующим образом:</p>  <p><img src="https://weblogs.asp.net/blogs/scottgu/image_5DE7197C.png" /></p>  <p>Обратите внимание, что переменные могут быть разбиты на несколько серверных блоков кода, переменная «message» объявлена в многострочном блоке @{ }, а также использована в блоке кода @message. Точно так же, как и в синтаксисе .aspx-файлов &lt;% %&gt; и &lt;%= %&gt;.</p>  <h6>Комплексные выражения</h6>  <p>Синтаксис @( ) позволяет размещать комплексные выражения. Например, можно переписать указанный выше код для конкатенации строки и числа вместе, внутри блока @ ( код ):</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/7585.image_61F62AD2.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/7585.image_5F00_61F62AD2.png" width="369" height="55" /> </p>  <h6>Интеграция содержимого и кода</h6>  <p>Анализатор Razor знает множество особенностей языка, позволяя полностью доверится ему, а не проводить время за собственной реализацией.</p>  <h6>Конфликтует ли он с email-адресами и другими местами использования @ в HTML?</h6>  <p>Анализатор Razor достаточно умен, чтобы в большинстве случаев определить, используется ли символ @ в коде или в статическом содержимом. Например, ниже я используя символ @, как часть email-адреса:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/8168.image_0E9EE4AC.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/8168.image_5F00_0E9EE4AC.png" width="608" height="78" /> </p>  <p>Во время разбота файла, Razor анализирует содержимое справа от символа @ и пытается определить, является ли эта часть C# кодом (если это CSHTML файл) или VB (если это VBHTML файл), или же это статические данные. Приведенный выше код, выведет следующий HTML (где email-адрес выведется, как статическое содержимое, а @DateTime.Now определится, как код):</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/6014.image_303B0D7D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/6014.image_5F00_303B0D7D.png" width="700" height="101" /> </p>  <p>В случае, где содержимое может интерпретироваться как код, а вы хотите вывести его как статический контент, достаточно явно указать два символа @@ вместо одного.</p>  <h6>Определение вложенного содержимого</h6>  <p>Размещая HTML-содержимое внутри if/else, foreach или других блочных выражений, следует обернуть внутреннее содержимое HTML- или XML-элементов для лучшего определения начала области содержимого.</p>  <p>Например, ниже, я обернул многострочный блок содержимого (который включает в себя фигурные скобки) в тег &lt;span&gt;:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/4061.image_03B1DD97.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/4061.image_5F00_03B1DD97.png" width="402" height="170" /> </p>  <p>Это сгенерирует следующий код для клиента, включая элемент &lt;span&gt;:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/5554.image_487E01CB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/5554.image_5F00_487E01CB.png" width="405" height="134" /> </p>  <p>По желанию, вы можете обернуть вложенное содержимое в блок &lt;text&gt; в случаях, когда данные должны сгенерироваться для клиента без тега обертки:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/3731.image_45889D18.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/3731.image_5F00_45889D18.png" width="388" height="167" /> </p>  <p>Данный код сгенерирует следующее содержимое для клиента. Обратите внимание – никаких обворачивающих тегов:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/8524.image_0ECB4214.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/8524.image_5F00_0ECB4214.png" width="404" height="115" /> </p>  <h6>Кодирование HTML</h6>  <p>По умолчанию содержимое, использующее блок @, автоматически кодировано в HTML для защиты против XSS-атак.</p>  <h6>Макет/MasterPage – основы</h6>  <p>Очень важно иметь единообразный вид на всех страницах веб-сайта или приложения. ASP.NET 2.0 представил концепцию «мастер страниц», которые помогают добиться этого при использовании .aspx-страниц или шаблонов. Razor также поддерживает данную концепцию, но применяя концепцию «layout pages»(страницы макета), которые позволяют определять шаблон сайта, а далее наследовать от него представления/страницы.</p>  <h6>Простейший пример макета</h6>  <p>Ниже представлен простой пример страницы макета, который мы сохраним под названием «SiteLayout.cshtml». Он может содержать любой статический HTML, а также любой динамический серверный код. Далее добавим вызов вспомогательного метода «RenderBody()» в том месте, где мы хотим вывести определённое тело содержимого для запрашиваемого URL:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/3821.image_7201A731.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/3821.image_5F00_7201A731.png" width="411" height="365" /> </p>  <p>Далее можно создать шаблон представления, назвав его «Home.cshtml», которое содержит только нужный код или содержимое для построения определенного тела запрашиваемой страницы и основывается на шаблоне макета:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/6471.image_48AA5F33.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/6471.image_5F00_48AA5F33.png" width="571" height="332" /> </p>  <p>Заметьте, что вы явно задали свойство «LayoutPage» в коде нашего файла Home.cshtml. Это означает, что мы хотим использовать шаблон SiteLayout.cshtml, как макет для данного представления. Мы можем так же задать файл макета непосредственно в контроллере ASP.NET MVC, указывая Home.cshtml, как шаблон представления или же настроив его стандартным макетом для сайта (в данном случае мы определяем его в одном файле проекта и все шаблоны представлений подхватывают его автоматически).</p>  <p>Когда мы сгенерируем Home.cshtml, как шаблон представления, он объединит содержимое макета и подстраницы, и отошлет содержимое клиенту:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/3833.image_26DE86A2.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/3833.image_5F00_26DE86A2.png" width="616" height="513" /> </p>  <h6>Компактный, чистый и выразительный код</h6>  <p>Хотелось бы обратить внимание на код выше и заметить, что определение макета и его использование из представлений/страниц имеет маленький размер. Код на скриншоте содержит все содержимое файлов SiteLayout.cshtml и Home.cshtml, нет никаких дополнительных настроек или тегов, нет префикса <a href="mailto:%25@Page%20%25">%@Page %</a> и другой разметки или заданных свойств.</p>  <p>Мы стараемся держать код, который вы пишете, в наиболее компактном и простом виде. Мы также хотим позволить любому открывать файлы в сторонних текстовых редактора и изменять код. Не требуется никакой дополнительной генерации кода или Intellisense.</p>  <h6>Макет/MasterPage – добавляем заменяемые части</h6>  <p>На страницах макета можно определять различные «секции», которые изменяют общее представление собственным содержимым. Это позволяет легко изменять/заполнять прерывающиеся секции содержимого на странице макета и обеспечивает значительную гибкость сайта.</p>  <p>Например, можно вернуться к нашему SiteLayout.cshtml и определить две секции внутри макета, которые могут изменять общий вид страницы. Назовем эти части «menu» и «footer» и укажем, что заполнять их необязательно, передав параметр optional=true помощнику RenderSection() (мы делаем это, используя новые <a href="https://weblogs.asp.net/scottgu/archive/2010/04/02/optional-parameters-and-named-arguments-in-c-4-and-a-cool-scenario-w-asp-net-mvc-2.aspx">необязательные параметры в C#</a>, о которых <a href="https://weblogs.asp.net/scottgu/archive/2010/04/02/optional-parameters-and-named-arguments-in-c-4-and-a-cool-scenario-w-asp-net-mvc-2.aspx">я уже рассказывал</a>).</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/6076.image_093C85D6.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/6076.image_5F00_093C85D6.png" width="475" height="488" /> </p>  <p>Так как две секции помечены, как «optional», я не обязан определять их в файле Home.cshtml. Мой сайт продолжает прекрасно работать, даже если их там нет.</p>  <p>Давайте вернемся обратно в Home.cshtml и объявим собственные части Menu и Footer. Скриншот ниже, содержит весь код Home.cshtml, больше ничего не потребуется. Однако, я перенес настройки LayoutPage на глобальный уровень, так что их здесь больше нет.</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/4010.image_7B89C9CD.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/4010.image_5F00_7B89C9CD.png" width="482" height="435" /> </p>  <p>Наши собственные секции перезаписывают «menu» и «footer» с помощью объявленных в файле блоков @section. Мы решили не требовать обертывать содержимое «main/body» внутри секции, а вместо этого просто оставить её в строковом виде (это позволяет сократить количество нажатий на клавиши и с легкостью добавлять секции в макет без просмотра всех страниц и изменения их синтаксиса).</p>  <p>Когда мы снова сгенерируем Home.cshtml как шаблон представления, он объединит содержание макета и подстраницы, интегрируя две новых части страницы и вернет клиенту следующее:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/4834.image_1987D7C2.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/4834.image_5F00_1987D7C2.png" width="612" height="778" /> </p>  <h6>Инкапсуляция и повторное использование HTML-помощников</h6>  <p>Мы рассмотрели, как обеспечить единый вид веб-сайта, используя страницы макета. Давайте теперь рассмотрим, как создавать повторно используемые вспомогательные методы HTML, которые дают нам чистую инкапсуляцию для генерации HTML-содержимого, и которые мы можем использовать в рамках одного или даже нескольких сайтов.</p>  <h6>Программные HTML-помощники</h6>  <p>Сегодня у ASP.NET MVC в наличии есть вспомогательные методы, которые можно вызвать в блоках кода и которые инкапсулируют генерацию HTML. И реализованы они только в виде кода (чаще всего, как методы расширений). Все существующие методы расширения HTML, созданные с ASP.NET MVC, будут так же работать при использовании Razor:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/0636.image_50158306.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/0636.image_5F00_50158306.png" width="423" height="242" /> </p>  <h6>Декларативные HTML-помощники</h6>  <p>Генерация HTML на основе одного класса кода работает, но не является идеальной.</p>  <p>Одной из возможностей в Razor является простой путь для создания повторно используемых HTML-помощников, используя более декларативный подход. Наш план заключается в том, чтобы дать вам возможность объявлять повторно используемые помощники с помощью декларативного синтаксиса @helper { }, как показано ниже.</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/6765.image_3FBA0B4D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/6765.image_5F00_3FBA0B4D.png" width="434" height="219" /> </p>  <p>Вы сможете размещать .cshtml-файлы, которые содержат данные помощники в каталоге Views\Helpers и впоследствии заново использовать их в любом представлении или странице на вашем сайте (никаких дополнительных действий не потребуется):</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/6371.image_74769F23.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/6371.image_5F00_74769F23.png" width="396" height="199" /> </p>  <p>Обратите внимание, как помощник ProductListing() определяет аргументы и параметры. Вы можете передавать любые параметры, какие захотите (включая необязательные параметры, типы, допускающие значения NULL, обобщенные методы и т.п.). Вы также сможете отлаживать данный код в Visual Studio.</p>  <p><b><i>Важно:</i></b><i> @helper синтаксис не будет доступен в первой бета-версии Razor, мы надеемся он будет доступен в следующих версиях. Вспомогательные методы, оформленные в виде кода, будут работать сразу.</i></p>  <p><i></i></p>  <h6>Передача строковых шаблонов, как параметров</h6>  <p>Другая полезная (и нереально мощная) возможность, которую мы предоставляем с Razor – это возможность передавать параметры в виде «строковых шаблонов» во вспомогательные методы. Данные «строковых шаблонов» могут содержать в себе, как HTML, так и код, и могут быть вызваны по требованию вспомогательного метода.</p>  <p>Ниже вы видите пример данной функциональности в действии, я использую HTML-помощник «Grid», который генерирует DataGrid для клиента:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/4152.image_33C42CE7.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/4152.image_5F00_33C42CE7.png" width="545" height="262" /> </p>  <p>Вызов метода Grid.Render – это C#. Мы используем новые именуемые параметры в C# для передачи строго типизированных аргументов в метод Grid.Render, данная возможность дает нам полное завершение выражений с Intellisense и проверку во время компиляции.</p>  <p>Параметр «format», который мы передаем, когда объявляем столбец, является «строчным шаблоном», он содержит и HTML и код, мы также можем настроить под себя формат данных. А самое прекрасное – то, что помощник Grid’a может вызывать наш строчный шаблон, как метод делегата, и может вызывать его, когда нужно и столько раз, сколько потребуется. В данном случае он будет вызывать каждый раз, когда он генерирует строку сетки и передает в «элемент», который может использовать наш шаблон для отображения результата.</p>  <p>Данная возможность позволит разрабатывать более мощные вспомогательные методы HTML. Вы сможете реализовывать их, как в коде (так вы это делаете сегодня), так и используя декларативный подход @helper{ }.</p>  <h6>Поддержка в Visual Studio</h6>  <p>Как я уже замечал ранее, одной из основных целей Razor – минимизировать количество нажатий клавиш, а также легко редактировать код любым текстовым редактором. Мы постарались держать синтаксис чистым, компактным и простым.</p>  <p>Несмотря на это, мы спроектировали Razor так, чтобы можно было получить все удобства редактирования кода в Visual Studio. Мы предоставим полную поддержку HTML-, JavaScript- и C#/VB-кода в Intellisense в Razor-файлах:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/2022.image_069F1A4C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/2022.image_5F00_069F1A4C.png" width="749" height="525" /> </p>  <p>Обратите внимание каким образом отработал Intellisense для объекта Product на «<a href="mailto:">@p</a>.» внутри элемента &lt;li&gt;. Заметьте, в Solution Explorer в папке \Views присутствуют оба шаблона представлений .aspx и .cshtml. Вы можете использовать различные механизмы рендеринга в одном приложении, чтобы понять, какой синтаксис вам более по душе.</p>  <h6>Выводы</h6>  <p>Мы думаем, Razor предоставляет новый изящный движок представлений для ориентированных на код шаблонов. Процесс программирования станет быстрым и веселым. Синтаксис является компактным и уменьшает количество нажатий клавиш, в то же время, улучшая читабельность разметки и кода. В следующей версии ASP.NET MVC механизм будет встроен в систему. Вы сможете удалить файлы .cshtml/.vbhtml в своем приложении и запустить их, как отдельные страницы, что также позволяет вам использовать их в приложениях ASP.NET Web Forms.</p>  <p>Все разработчики, которые тестировали проект последние несколько месяцев, оставили крайне позитивные отзывы. Мы собираемся предоставить публичную бета-версию, как можно скорее и, конечно же, ожидаем услышать ваши мнения.</p>  <p><a href="https://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx">Оригинал</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Поддержка новой встроенной базы данных в ASP.NET</title>
      <link>https://docs.microsoft.com/archive/blogs/ruscottgu/33</link>
      <pubDate>Fri, 16 Jul 2010 01:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Anton Belousov - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ruscottgu/2010/07/16/33/</guid>
      <description><![CDATA[Буквально на днях я рассказал о новом IIS Express и поведал о нашей работе над улучшениями, которые...]]></description>
      <content:encoded><![CDATA[<p>Буквально на днях я рассказал о новом <a href="https://blogs.msdn.com/b/ruscottgu/archive/2010/07/15/introducing-iis-express.aspx">IIS Express</a> и поведал о нашей работе над улучшениями, которые мы произвели для облегчения жизни ASP.NET-разработчикам.</p>  <p>И сегодняшний пост продолжает тему упрощения разработки и раскроет информацию о наших разработках в области баз данных. Фактически я хочу анонсировать завершение работы над бесплатным SQL Server Compact Edition (SQL CE) в ASP.NET-приложениях. Это позволяет упростить разработку и со стороны баз данных.</p>  <p>&#160;</p>  <h5>SQL Server Compact Edition 4</h5>  <p>SQL CE абсолютно бесплатный, встроенный движок баз данных. Мы предоставим доступ к первой публичной бета-версии очень скоро. 4-я версия была разработана и тестировалась с ориентацией на работу с веб-приложениями ASP.NET.</p>  <h6>Работа с существующими API</h6>  <p>SQL CE работает с существующими .NET API и поддерживает SQL Server совместимый синтаксис запросов. Это означает, что с SQL CE можно использовать существующие API для работы с данными такие, как ADO.NET, а также более высокоуровневые ORM, как Entity Framework и NHibernate. Подойдет почти любой существующий API для работы с данными, который поддерживает модель провайдера ADO.NET.</p>  <p>Все это позволяет вам использовать отлаженные навыки программирования при работе с данными уже сегодня.</p>  <h6>Не требуется никакой инсталляции</h6>  <p>Для того, чтобы использовать SQL CE от вас не требуется запускать установку или инсталлировать сервер баз данных. Теперь достаточно просто скопировать исполняемые файлы SQL CE в папку \bin вашего ASP.NET-приложения, а дальше оно может использовать сервер, как движок баз данных. Не требуется никакой инсталляции или дополнительных прав безопасности, просто запустил и работай.</p>  <p>Приложения могут свободно включать в поставку SQL CE. Вы просто копируете веб-приложение на любой сервер и оно работает.</p>  <h6>Файлы базы данных хранятся на диске</h6>  <p>SQL CE хранит базы данных в виде файлов (с расширением .sdf). Вы можете хранить эти файлы в каталоге проекта \App_Data, нет нужды регистрировать их для использования в приложении.</p>  <p>Движок SQL CE запускается в пространстве вашего ASP.NET-приложения. Когда приложение завершает свою работу, он автоматически выгружается.</p>  <h6>Shared-хостинги уже поддерживают SQL CE 4</h6>  <p>SQL CE 4 уже может работать на хостингах ASP.NET 4 со средним уровнем доверия к приложениям, хостеру ничего не нужно устанавливать. Хостерам вообще <u>ничего не нужно делать</u> для работы SQL CE.</p>  <p>Разворачивать приложение теперь можно вообще с помощью одного FTP – просто копируем папку проекта и все готово.</p>  <p>SQL CE сам запустится в вашем приложении на удаленном хосте.</p>  <h6>Поддержка в Visual Studio 2010 и Visual Web Developer 2010 Express</h6>  <p>В ближайшем будущем у VS 2010 и Visual Web Developer 2010 Express появятся инструменты, поддерживающие работу с SQL CE 4. Вы сможете добавлять файлы SQL CE в ASP.NET-проекты, использовать Visual Studio Server Explorer для создания и редактирования таблиц, а также применять высокоуровневые конструкторы, как Entity Framework (см.ниже) для моделирования и привязки базы данных к классам, которые в дальнейшем использовать в LINQ.</p>  <p><a href="https://weblogs.asp.net/blogs/scottgu/image_6F5C0D2A.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/5305.clip_image001_754B8576.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/5305.clip_5F00_image001_5F00_754B8576.png" width="792" height="545" /></a></p>  <p>Вдобавок к уже известным вам API для работы с данными, вы сможете использовать те же инструменты разработки для SQL CE.</p>  <p>Разработка и эксплуатация</p>  <p>SQL может использоваться на машине разработчика и для простых сайтов на производстве. C 4-ой версией SQL CE мы провели техническую работу и удостоверились, что SQL CE не будет падать или создавать <a href="https://ru.wikipedia.org/wiki/%D0%92%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D0%B0%D1%8F_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0">взаимную блокировку</a>, когда выполняются многопоточные сценарии, как в случае с ASP.NET. Это огромное изменение, по сравнению с предыдущей версией SQL CE, которые мы разрабатывали только для клиентской части, плюс – он блокировал работу в веб-окружении. А теперь SQL CE 4 можно без проблем использовать на веб-серверах.</p>  <p>Не существует никаких лицензионных ограничений для использования SQL CE.</p>  <h6>Простая миграция на SQL Server</h6>  <p>SQL CE является встроенной базой данных, что делает её идеальной для простых сценариев. Для высоконагруженных же сайтов и приложений вы, наверное, захотите мигрировать на SQL Server Express (бесплатен), SQL Server или SQL Azure. Эти сервера обладают лучшей масштабируемостью, предоставляют больше возможностей для разработки (включая хранимые процедуры, которые не поддерживаются в SQL CE), а также имеют расширенные возможности для управления данных.</p>  <p>Мы предоставим инструменты для миграции, которые позволят взять базу данных SQL CE и легко обновится до SQL Server Express, SQL Server или SQL Azure. Вам не придется вносить изменения в код для обновления базы данных SQL CE до SQL Server или SQL Azure. Наша цель – дать вам возможность просто изменить строку, задающую соединение с базой данных в web.config и продолжить работать с приложением.</p>  <h6>Итог</h6>  <p>SQL CE 4 предоставляет простую, легкую базу данных, которую можно использовать в ASP.NET-приложениях. Он позволяет быстро начать работу над проектом без инсталляции полноценной базы данных на локальной машине разработчика. Вследствие совместимости с полной версией SQL Server, ваш код использует все те же API (ADO.NET, Entity Framework, NHibernate и т.п.)</p>  <p>У вас появится возможность быстро разворачивать базы данных SQL CE на хостингах для простых сайтов и приложений. В дальнейшем, при росте трафика и нагрузки можно будет обновить базу данных до SQL Server Express, SQL Server или SQL Azure, не изменяя код.</p>  <p>Мы предоставим доступ к первой публичной бета-версии SQL CE 4 (вместе с <a href="https://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx">IIS Express</a> и другими более крутыми штуками, о которых я еще напишу) на следующей неделе.</p>  <p><a href="https://weblogs.asp.net/scottgu/archive/2010/06/30/new-embedded-database-support-with-asp-net.aspx">Оригинал статьи</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Представляем IIS Express</title>
      <link>https://docs.microsoft.com/archive/blogs/ruscottgu/iis-express</link>
      <pubDate>Thu, 15 Jul 2010 07:23:23 GMT</pubDate>
      <dc:creator><![CDATA[Anton Belousov - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ruscottgu/2010/07/15/iis-express/</guid>
      <description><![CDATA[Сегодня разработчики создают и тестируют ASP.NET-сайты и приложения, используя один из двух...]]></description>
      <content:encoded><![CDATA[<p>Сегодня разработчики создают и тестируют ASP.NET-сайты и приложения, используя один из двух веб-серверов:</p>  <ul>   <li>ASP.NET Development Server, который является встроенным в Visual Studio </li>    <li>IIS Web Server, который встроен в Windows.</li> </ul>  <p>Каждый из них имеет свои преимущества и недостатки. Многие разработчики не раз отмечали, – «Очень хотелось бы с легкостью использовать ASP.NET Development Server, но при этом иметь всю мощь и возможности IIS». Сегодня, я с радостью представляю вам бесплатную версию IIS Express, который объединяет в себе лучшие качества обоих веб-серверов и позволит еще проще разрабатывать и запускать ASP.NET-сайты и приложения.</p>  <p>IIS Express будет работать с VS 2010 и Visual Web Developer 2010 Express, запускаться на Windows XP и выше, не требует прав администратора и внесения изменений в код приложения. Позволяет работать со всеми типами ASP.NET-приложений и разрабатывать, используя всю мощь возможностей IIS 7.x.</p>  <h4>Как обстоят дела в наше время</h4>  <p>Прежде чем углубиться в детали IIS Express, давайте пробежимся по ASP.NET Development Server и IIS.</p>  <h6>ASP.NET Development Server</h6>  <p>Встроенный в Visual Studio ASP.NET Development Server (так же известен, как «Cassini») обладает преимуществами легкого и быстро запуска. Он не прослушивает удаленные порты (что делает проще работу в корпоративной среде в плане безопасности), работает даже когда у вас нет прав администратора, не требует отдельной установки на машину.</p>  <p><a href="https://weblogs.asp.net/blogs/scottgu/image_189F2676.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/5417.clip_image001_1DB9C71D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/5417.clip_5F00_image001_5F00_1DB9C71D.png" width="463" height="109" /></a></p>  <p>Недостатком же является неполный набор возможностей веб-сервера. Например, отсутствует поддержка SSL, URL Rewriting Rules (о котором я <a href="https://weblogs.asp.net/scottgu/archive/2010/04/20/tip-trick-fix-common-seo-problems-using-the-url-rewrite-extension.aspx">недавно писал</a>), собственных настроек безопасности и другие возможности IIS 7.</p>  <h6>IIS веб-сервер</h6>  <p>IIS – альтернативный способ для запуска и тестирования приложений с Visual Studio. Вы можете настроить в Visual Studio любой веб-проект на использование IIS, нажав правой кнопкой по проекту, зайдя в свойства и далее выбрав закладку «Web»:</p>  <p><a href="https://weblogs.asp.net/blogs/scottgu/image_564C0E32.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/6406.clip_image002_2BC8904D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/6406.clip_5F00_image002_5F00_2BC8904D.png" width="711" height="350" /></a></p>  <p>Используя IIS, как сервер для разработок вы получаете все возможности веб-сервера (SSL, URL Rewrite Rules и т.п.). IIS является полноценным веб-сервером, а это значит, что вы точно видите, как будет работать ваше приложение на публичном сервере.</p>  <p>Но и тут есть недостатки. Многие компании запрещают использовать полноценные веб-сервера на машинах разработчиков. IIS также требует прав администратора для установки и отладки проектов. Различные версии Windows поддерживают различные версии IIS. Например, если у вас Windows XP, то у вас должен стоять IIS 5.1, который не поддерживает все новые возможности IIS 7.x. Настраивая веб-проект в VS на использование IIS, вам придется доустановить недостающие компоненты и пройти дополнительные шаги настройки.</p>  <h6>IIS Express – все лучшее</h6>  <p>Мы работали над новой версией IIS 7.x, которая оптимизирована для сценариев разработчиков, которую мы назвали «IIS Express». Мы думаем, он объединяет в себе легкость использования ASP.NET Web Server и всю мощь IIS. Вот перечень особенностей:</p>  <p>· Он легче и проще в установке (менее 10 Mб для загрузки и супербыстрая установка) </p>  <p>· <u>Не требует</u> прав администратора для запуска/отладки приложений из Visual Studio </p>  <p>· Предоставляет <u>полный набор</u> возможностей веб-сервера, включая SSL, URL Rewrite, обеспечивает поддержку медиа и других модулей IIS 7.x </p>  <p>· Поддерживает ту же модель расширения web.config, что и IIS 7.x </p>  <p>· Может быть установлен вместе с IIS и ASP.NET Development Server, не конфликтует абсолютно </p>  <p>· Работает на Windows XP и выше, дает все преимущества IIS 7.x на всех ОС-платформах </p>  <p>На IIS Express (как и на ASP.NET Development Server) можно быстро запустить любой сайт из каталога на диске. <u>Не требуется</u> никаких шагов регистрации или настройки. Все это позволяет просто и со вкусом работать любому веб-разработчику.</p>  <h6>Интеграция с VS 2010</h6>  <p>Мы позаботились о простой интеграции IIS Express в Visual Studio 2010. Вы можете использовать его вместо ASP.NET Web Server, как веб-сервер по умолчанию для ASP.NET-проектов. Как и с ASP.NET Development Server, вам не нужно регистрировать сайт или виртуальный каталог для IIS Express. Он используют ту же модель работы, что и ASP.NET Web Server сегодня, но только дает больше возможностей.</p>  <p>Когда я нажму F5 для запуска ASP.NET-проекта, Visual Studio автоматически запустит IIS Express и будет использовать его для запуска/отладки приложений (никаких дополнительных настроек не требуется). Как и во время работы ASP.NET Web Server, IIS Express будет отображаться в трее панели задач:</p>  <p><a href="https://weblogs.asp.net/blogs/scottgu/image_093B9E9A.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image003" border="0" alt="clip_image003" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/8561.clip_image003_5BA3320E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/8561.clip_5F00_image003_5F00_5BA3320E.png" width="245" height="67" /></a></p>  <p>Нажав правой кнопкой по иконке и выбрав «Exit» вы с легкостью выключите IIS Express. Вы также можете просмотреть список всех запущенных сайтов, а также их месторасположение на диске и версию .NET:</p>  <p><a href="https://weblogs.asp.net/blogs/scottgu/image_60BCBC85.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/24/00/metablogapi/5342.clip_image004_35CD0BAB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-24-00-metablogapi/5342.clip_5F00_image004_5F00_35CD0BAB.png" width="493" height="383" /></a></p>  <p>Две потрясающие возможности:</p>  <ol>   <li>Запущенный «Test Site», как и сам IIS Express, живет в каталоге C:\Users\[username]. Что позволяет использовать IIS Express, сайты и другие сценарии, которые не возможны с полной версией IIS (включая возможность запускать IIS Express, как в ограниченной по параметрам безопасности корпоративной среде, так и на школьных рабочих местах с ограниченным доступом) без прав администратора. </li>    <li>Запущенный «Test Site» поддерживает методы доступа<u> HTTP</u> и <u>HTTPS</u>. IIS Express автоматически устанавливает самоподписываемый сертификат и включает URL ACL- и SSL-сертификаты для портов, так что разработчики (работающие не с правами администратора) могут использовать SSL, не требуя повышения уровня прав для дополнительной установки или конфигурирования. Это позволяет настраивать защищенные страницы прямо в приложениях (как формы входа) на SSL и тестировать во время разработки, как на реальном веб-сервере. </li> </ol>  <h6>Набор возможностей IIS 7.x </h6>  <p>Сегодня, IIS Express так же легко использовать, как и ASP.NET Web Server. Но, учитывая тот факт, что IIS Express основан на IIS 7x, у вас в руках оказывается полнофункциональный веб-сервер. Вы можете запускать свои приложения, как на реальном внешнем веб-сервере. Вдобавок к SSL, вы можете использовать такие модули, как URL Rewrite, Media Extensions, Dynamic Compression, Advanced Logging, Custom Security и др.</p>  <p>Кроме того, IIS Express поддерживает классический ASP и другие типы файлов и расширений, поддерживаемых IIS. Все это делает его идеальным для сайтов, комбинирующим различные технологии.</p>  <h6>Заключение</h6>  <p>Мы думаем IIS Express позволит гораздо проще создавать, запускать и тестировать веб-приложения. Он работает со всеми версиями ASP.NET и поддерживает все типы ASP.NET-приложений (включая Web Forms и MVC). Что еще лучше – <u>вам не нужно ничего менять в коде</u>. Вы можете использовать его для своих проектов уже сегодня.</p>  <p>Выход публичной beta-версии IIS Express состоится уже скоро. Вы сможете нажать правой кнопкой на любой папке и запустить находящийся в ней веб-сайт в IIS Express. Позже в этом году, мы выпустим исправление для VS 2010 и Visual Web Developer 2010 Express, которое позволит использовать IIS Express по умолчанию вместо встроенного ASP.NET Developer Server. Дальнейшие версии Visual Studio будут снабжаться данным функционалом по умолчанию.</p>  <p><a href="https://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx">Оригинал статьи</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Улучшения Intellisense в VS 2010 (из серии статей про VS 2010 и .NET 4.0)</title>
      <link>https://docs.microsoft.com/archive/blogs/ruscottgu/intellisense-vs-2010-108</link>
      <pubDate>Thu, 22 Oct 2009 12:47:00 GMT</pubDate>
      <dc:creator><![CDATA[Gaidar Magdanurov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ruscottgu/2009/10/22/intellisense-vs-2010-108/</guid>
      <description><![CDATA[Это десятая из серии статей, в которых я пишу о готовящихся к выходу VS 2010 и .NET 4. Сегодня я...]]></description>
      <content:encoded><![CDATA[<p>Это десятая из <a href="https://blogs.msdn.com/ruscottgu/archive/2009/08/25/vs-2010-net-4.aspx">серии статей</a>, в которых я пишу о готовящихся к выходу VS 2010 и .NET 4. <p>Сегодня я расскажу о некоторых небольших, но очень приятных улучшениях в работе intellisense в VS 2010, а именно об улучшенной фильтрации названий типов/методов/свойств для автозавершения. Это позволит вам проще находить и использовать различные API по мере написания кода. <h5><u>Intellisense в VS 2008</u></h5> <p>Чтобы помочь продемонстрировать вам улучшения в intellisense, сделанные в VS 2010, давайте начнем с простого сценария в VS 2008, где мы хотим написать какой-то код для возможности редактирования данных с использованием элемента управления GridView. <p>Мы могли бы начать с ввода “GridView1.Edit”, чтобы появилось окно intellisense, где мы просмотрели бы доступные для этого элемента методы и свойства, связанные с редактированием (edit). Если проделать это в VS 2008, то появится окно intellisense, в котором курсор переместится на к членам GridView, чьи названия начинаются со слова “Edit”: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_09E715E4.png"> <p>Это здорово в том случае, если название метода/свойства/события, с которым мы хотим работать, начинается со слова “Edit”, но это не особо поможет нам, если оно начинается с чего-либо другого (например, событие “RowEditing” или вспомогательный метод “SetEditRow()”). Нам придется либо вручную прокрутить список вверх или вниз в поиске других элементов, либо вообще воспользоваться для поиска обозревателем объектов или справочной системой. <h5><u>Intellisense в VS 2010</u></h5> <p>Теперь опробуем тот же самый сценарий в VS 2010. Здесь, когда мы напечатаем “GridView1.Edit”, то в окне intellisense, увидим, что по умолчанию все так же выбирается свойство EditIndex. Однако, на этот раз мы увидим отфильтрованный список методов/свойств/событий, в чьих названиях слово “Edit” встречается <em>в любом месте</em>: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_00AADAA3.png"> <p>За счет этого вы можете быстро увидеть <u>все</u> связанные с редактированием методы/свойства/события и быстрее найти то, что вам нужно. <p><u><strong>Поиск по ключевым словам</strong></u> <p>Новый механизм фильтрации intellisense в VS 2010 может оказаться полезным для поиска любого метода/свойства/события, независимо от того, с какого слова начинается их название. К примеру, если вы хотите включить возможность вывода данных grid'а на несколько страниц, но не помните точно, как это делается, вы можете просто набрать “GridView1.Paging”, и в окне intellisence автоматически будут выведены лишь те названия, в которые входит слово “paging”. Обратите внимание, что у класса GridView на самом деле нет ни одного члена, чье название начиналось бы со слова “Paging”, но, тем не менее, я смог найти два члена, относящиеся к выводу информации на нескольких страницах: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_7EFA0ECE.png"> <p><strong><u>Поиск типов</u></strong> <p>Новый механизм фильтрации intellisense в VS 2010 также может оказаться полезным для быстрого поиска классов и типов. Например, когда мы печатаем “List” для объявления переменной, редактор кода предлагает нам список типов и классов, автоматически отфильтрованный по наличию слова “List” где-либо в их названии (включая IList&lt;&gt; и SortedList&lt;&gt;, которые не начинаются с List): <p><img src="https://weblogs.asp.net/blogs/scottgu/image_5270DEE8.png"> <p>За счет этого вы сможете намного проще находить названия типов, которые помните не полностью, без необходимости прибегать к их поиску в обозревателе объектов и/или справочной системе. <p><strong><u>Поддержка “PascalCase” в Intellisense</u></strong> <p>Названия типов/методов/свойств в .NET Framework используют соглашение под названием “PascalCase” – это значит, что первая буква каждого слова в них делается заглавной (например, <strong>P</strong>age<strong>I</strong>ndex<strong>C</strong>hanged). <p>Механизм фильтрации intellisense в VS 2010 теперь позволяет воспользоваться этим обстоятельством для быстрого поиска и фильтрации названий типов и членов по шаблону их имен, определяемому “PascalCase”. Например, если вы напечатаете “GridView1.PIC”, то VS 2010 покажет вам не только члены GridView, в чьих именах встречается PIC, но и те, в чьих названиях слова, выделенные в соответствии с “PascalCase”, начинаются с этих букв в указанной последовательности: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_74E56DA3.png"> <p>Обратите внимание, как на рисунке выше напечатанное “PIC” привело к появлению в списке выбора “PageIndexChanged” и “PageIndexChanging”. Таким образом, вы можете сэкономить несколько нажатий клавиш при поиске нужных типов или методов/свойств/событий. <h5><u>Резюме</u></h5> <p>Думаю, вы согласитесь, что новый подход к фильтрации списка имен в intellisense, используемый в VS 2010, намного упрощает при написании вашего кода поиск и использование классов и их членов. Вы можете воспользоваться преимуществами нового механизма фильтрации intellisense и в VB, и в C#. <p>Надеюсь, вы нашли для себя что-то полезное, <p>Скотт <p>P.S. В последнее время я чаще использую Twitter, чтобы рассказывать о предстоящих планах и публиковать ссылки на интересные ресурсы. Вы можете следить за моими публикациями на Twitter по адресу: <a href="https://www.twitter.com/scottgu">https://www.twitter.com/scottgu</a> (@scottgu это мой ник на Twitter) <p><a href="https://weblogs.asp.net/scottgu/archive/2009/10/22/vs-2010-code-intellisense-improvements-vs-2010-and-net-4-0-series.aspx">оригинал статьи</a>]]></content:encoded>
    </item>
    <item>
      <title>Возможности поиска и навигации по коду в VS 2010 (из серии статей про VS 2010 и .NET 4.0)</title>
      <link>https://docs.microsoft.com/archive/blogs/ruscottgu/63</link>
      <pubDate>Wed, 21 Oct 2009 01:50:00 GMT</pubDate>
      <dc:creator><![CDATA[Gaidar Magdanurov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ruscottgu/2009/10/21/63/</guid>
      <description><![CDATA[Возможности поиска и навигации по коду в VS 2010 (из серии статей про VS 2010 и .NET 4.0) Это...]]></description>
      <content:encoded><![CDATA[<h4>Возможности поиска и навигации по коду в VS 2010 (из серии статей про VS 2010 и .NET 4.0)</h4> <p>Это девятая из <a href="https://blogs.msdn.com/ruscottgu/archive/2009/08/25/vs-2010-net-4.aspx">серии статей</a>, в которых я пишу о готовящихся к выходу VS 2010 и .NET 4. Сегодня я расскажу о некоторых новых возможностях поиска и навигации по коду, которые теперь встроены в VS 2010. <h5><u>Поиск и навигация по коду</u></h5> <p>Разработчикам нужно иметь возможности легкой навигации, поиска и понимания того кода, над которым они работают. В ходе исследований, которые мы провели, выяснилось, что разработчики обычно проводят больше времени читая код, проводя его обзоры и ища в нем что-либо, нежели они тратят на собственно написание нового кода. <p>В редакторе кода в VS 2010 появилось несколько приятных новых возможностей, которые сделают ваш поиск и навигацию по коду более продуктивными и позволят легче понимать, как тот или иной код используется в разрабатываемом программном решении. <h5><u>Поиск и навигация по исходному коду ASP.NET MVC</u></h5> <p>В этот статье я для примера буду использовать исходный код ASP.NET MVC (насчитывающий многие тысячи строк кода), чтобы продемонстрировать некоторые из новых возможностей VS 2010 по поиску и навигации. Если у вас установлена 2-я бета VS 2010, вы сможете воспроизвести описываемые действия, загрузив исходный кода ASP.NET MVC <a href="https://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471">отсюда</a>. <p><img src="https://weblogs.asp.net/blogs/scottgu/image_5F9C65E4.png"> <p>Вы заметите, что описываемые ниже возможности весьма работают по-настоящему быстро с этим проектом, несмотря на то, что он содержит тысячи и тысячи строк кода. Все возможности, которые я продемонстрирую, теперь встроены в VS 2010 и работают со всеми типами проектов как на VB, так и на C#. <h5><u>Поддержка “Navigate To” в VS 2010</u></h5> <p>Иметь возможность быстрого поиска и навигации по коду одинаково важна как для больших, так и для маленьких проектов. <p>Visual Studio 2010 теперь поддерживает новую комбинацию клавиш <strong>Ctrl</strong>+<strong>,</strong> (т.е. нужно одновременно нажать Ctrl и запятую). При ее нажатии появится диалоговое окно “Navigate To”, позволяющий быстро найти типы, файлы, переменные, а также методы и свойства в вашем решении (solution) и затем перейти к ним и открыть в редакторе кода: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_0713324F.png"> <p>Диалог “Navigate To” предоставляет интерфейс для быстрого инкрементного поиска, результаты которого немедленно появляются под полем ввода по мере того, как вы вводите поисковый запрос. К примеру, напечатайте “cont” (не нажимая в конце enter) - и вы увидите, как в списке результатов поиска сразу же появится 176 результатов: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_12C87981.png"> <p>Введите еще несколько символов - и вы увидите, что список результатов автоматически использует их для фильтрации, оставляя лишь те результаты, которые соответствуют введенной строке “controller”: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_77AFAA72.png"> <p>Вы можете использовать полосу прокрутки, чтобы просмотреть результаты, либо нажать tab и использовать клавиши стрелок, если не хотите убирать руки с клавиатуры. Вы заметите, что в окне “Navigate To” выводятся результаты любых типов, удовлетворяющие поисковому запросу, включая названия типов, свойств, методов, объявления полей и названия файлов: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_473925FC.png"> <p>Выбор любого из результатов поиска привет к тому, что в редакторе кода VS 2010 откроется соответствующий файл (если он еще не открыт), курсор переместится к соответствующей позиции в файле, а найденный идентификатор будет подсвечен: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_6BEA3D73.png"> <p><u><strong>Приятные возможности нечеткого поиска</strong></u> <p>Поле ввода в окне “Navigate To” поддерживает некоторые возможности “нечеткого поиска” (fuzzy search), которые позволят вам эффективно осуществлять поиск даже тогда, когда вы не знаете точно название того, что ищете. Эти возможности хорошо сочетаются с интерфейсом инкрементного/немедленного поиска в этом окне и позволяют вам уточнять поисковый запросы и сразу же видеть новые результаты по мере того, как вы печатаете. <p>Чтобы опробовать это на примере, давайте для начала поищем по слову “cache”. Обратите внимание, что результаты поиска включают не только названия, начинающиеся со слова “cache”, но также и другие, в названии которых это слово просто где-либо встречается: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_219F82CE.png"> <p>Для дальнейшей фильтрации результатов мы можем добавить еще несколько слов в поисковый запрос. Например, ниже я отфильтровал результаты так, чтобы в названиях встречались слова “cache” <em>и</em> “action”: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_2D54CA00.png"> <p>Названия типов/методов/свойств в .NET Framework используют соглашение под названием “PascalCase” – это значит, что первая буква каждого слова в них делается заглавной. В диалоге “Navigate To” вы можете воспользоваться этим обстоятельством для быстрой фильтрации типов: просто наберите аббревиатуру для слов, входящих в название, - и сразу же увидите результаты поиска, соответствующие этой аббревиатуре с учетом указанного соглашения об именовании. <p>Например, введя “AMS”, вы получите показанные ниже результаты поиска (лишь те названия типов/методов/свойств, в которых встречаются слова, начинающиеся сначала с A, затем с M, затем с S): <p><img src="https://weblogs.asp.net/blogs/scottgu/image_18EF0475.png"> <p>Таким образом, окно “Navigate To” позволяет вам быстро искать код и переходить к нему, используя лишь несколько нажатий клавиш, так что вам уже не понадобится браться за мышь, открывать окно solution explorer и щелкать по нужному файлу. <h5><u>Просмотр иерархии вызовов</u></h5> <p>Возможность быстрого поиска и навигации по коду - это здорово, но возможность в дополнение к этому быстро узнать, как используется тот или иной код, - это еще лучше. В VS 2010 появилась новая функциональность “View Call Hierarchy” (просмотр иерархии вызовов), позволяющая быстро узнать, где в вашем исходном коде используется определенный метод или свойство, а также позволяющая быстро пройтись по графу дерева вызовов в рамках вашего исходного кода (без необходимости запускать или отлаживать разрабатываемое решение). <p>Чтобы воспользоваться этой возможностью, просто выберите название метода или свойства в вашем исходном коде и либо нажмите комбинацию клавиш <strong>Ctrl+K,Ctrl+T</strong>, либо щелкните правой кнопкой мыши и выберите из контекстного меню пункт “View Call Hierarchy”: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_76B6F8EE.png"> <p>В результате появится вспомогательное окно “Call Hierarchy”, которое по умолчанию располагается под редактором кода. На рисунке ниже вы видите, как в окне “Call Hierarchy” отображаются два метода, которые в рамках нашего решения (solution) вызывают выбранный ранее метод ViewPage.RenderView(). <p><img src="https://weblogs.asp.net/blogs/scottgu/image_581D0845.png"> <p>При желании мы можем перейти вниз по иерархии вызовов к первому методу “RenderViewAndRestoreContentType” и посмотреть, кто, в свою очередь, вызывает его: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_5CB312FF.png"> <p>Для виртуальных методов/свойств вы также можете использовать окно иерархии вызовов, чтобы узнать, в каких классах-наследниках они перегружаются. <p>При двойном щелчке мышью по любому методу/свойству в окне “Call Hierarchy” в редакторе кода откроется соответствующий файл с исходным кодом, и текущая позиция в файле установится на нужной строке: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_79D8BB09.png"> <p>Таким образом, в ходе разработки вы можете быстро проходить по множеству файлов с исходным кодом вашего решения, чтобы лучше понять взаимосвязи между классами и методами. <h5><u>Подсветка ссылок</u></h5> <p>В VS 2010, когда вы выбираете или выделяете переменную / параметр / объявление поля в редакторе кода, все последующие места их использования автоматически подсвечиваются в редакторе. За счет этого вы с легкостью можете быстро определить, где и как используется та или иная переменная или параметр. <p>Например, когда вы в редакторе кода выделите параметр “controllerContext”, переданный в метод ControllerActionInvoker.GetParameterValue(), как показано ниже, то обратите внимание, как автоматически подсветятся 4 обращения к этому параметру в методе: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_5E53B906.png"> <p>Если я выберу локальную переменную метода, то автоматически подсветятся все места, в которых эта переменная используется: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_0DC227D3.png"> <p>Если окажутся подсвечены несколько мест, где используется переменная или параметр, то вы можете быстро перемещаться между ними с помощью комбинаций клавиш <strong>Ctrl-Shift-Стрелка Вверх</strong> и <strong>Ctrl-Shift-Стрелка вниз</strong>. <h5><u>Резюме</u></h5> <p>Новый редактор кода в VS 2010 позволяет быстро осуществлять поиск, навигацию и исследование исходного кода в рамках проекта или решения. Скорость выполнения этих операций по-настоящему высока (даже на больших объемах исходного кода), а соответствующая информация поддерживается в актуальном состоянии по мере того, как вы работаете над проектом и вносите в него изменения. Таким образом, новые возможности позволяют вам работать намного более продуктивно. <p>Надеюсь, вы нашли для себя что-то полезное, <p>Скотт <p>P.S. В последнее время я чаще использую Twitter, чтобы рассказывать о предстоящих планах и публиковать ссылки на интересные ресурсы. Вы можете следить за моими публикациями на Twitter по адресу: <a href="https://www.twitter.com/scottgu">https://www.twitter.com/scottgu</a> (@scottgu это мой ник на Twitter) <p><a href="https://weblogs.asp.net/scottgu/archive/2009/10/21/searching-and-navigating-code-in-vs-2010-vs-2010-and-net-4-0-series.aspx">оригинал статьи</a>]]></content:encoded>
    </item>
    <item>
      <title>2-я бета-версия VS 2010 и .NET 4.0</title>
      <link>https://docs.microsoft.com/archive/blogs/ruscottgu/2-vs-2010-net-4-0</link>
      <pubDate>Mon, 19 Oct 2009 11:01:00 GMT</pubDate>
      <dc:creator><![CDATA[Gaidar Magdanurov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ruscottgu/2009/10/19/2-vs-2010-net-4-0/</guid>
      <description><![CDATA[Я счастлив сообщить, что сегодня мы выпустили версии бета 2 Visual Studio 2010 и .NET 4.0....]]></description>
      <content:encoded><![CDATA[<p>Я счастлив сообщить, что сегодня мы выпустили версии бета 2 Visual Studio 2010 и .NET 4.0. Подписчики MSDN могут <a href="https://go.microsoft.com/fwlink/?LinkID=151797">скачать их</a> уже сейчас. Для всех остальных версии бета 2 станут доступны для загрузки с этой среды. <p><img src="https://weblogs.asp.net/blogs/scottgu/image_7D4408BA.png"> <h5><u>Улучшения в VS 2010 и .NET</u></h5> <p>В VS 2010 и .NET 4 реализовано огромное количество улучшений и дополнений. В их числе существенные улучшения для разработки веб-приложений ASP.NET, клиентских приложений WPF и WinForms, для SharePoint, приложений Silverlight, приложений для работы с БД, приложений параллельной обработки данных, а также приложений для облачных вычислений (cloud computing). В VS 2010 также реализовано огромное количество улучшений в IDE, редакторах кода, языках разработки и в инструментах проектирования, создания и тестирования приложений уровня предприятий. <p>TFS 2010 теперь стало проще устанавливать (потребуется лишь 20 минут, чтобы настроить контроль версий файлов с исходным кодом, отслеживание запросов на исправления и улучшения, автоматизацию сборки и непрерывной интеграции), он может быть установлен как на серверные, так и на клиентские операционные системы, а также доменные контроллеры, кроме того, теперь он также включен во все варианты подписки MSDN на Visual Studio. <p>Я начал <a href="https://blogs.msdn.com/ruscottgu/archive/2009/08/25/vs-2010-net-4.aspx">серию статей</a> в блоге, где буду освещать некоторые из улучшений и новых возможностей VS 2010 и .NET 4. Следите за моим блогом, потому что в ближайшие месяцы я собирают написать об этом много новых статей. <h5><u>Упрощение вариантов поставки в продуктовой линейке VS 2010</u></h5> <p>Начиная с версии VS 2010, мы упрощаем продуктовую линейку и различные варианты комплектации Visual Studio, кроме того, мы предоставили дополнительные преимущества подписчикам MSDN. Теперь мы предлагаем такие варианты поставки: <ul> <li><strong>Visual Studio Express</strong>: бесплатные варианты поставки для веб-разработчиков, а также разработчиков VB, C# и C++.  <li><strong>Visual Studio 2010 Professional с подпиской MSDN</strong>: профессиональные средства разработки, использовавшиеся вами и раньше, которые дополнены интеграцией со средствами контроля версий, средствами регистрации ошибок, автоматизации сборки проектов и многим другим. Также в эту поставку входит 50 часов в месяц облачных вычислений Azure.  <li><strong>Visual Studio 2010 Premium с подпиской MSDN</strong>: сюда входит все, что включено в Professional-версию, плюс более продвинутые средства разработки (включая расширенные возможности профилирования и отладки, контроля покрытия исходного кода тестами, анализа исходного кода и приоритезации тестирования), расширенная поддержка работы с базами данных, тестирования пользовательского интерфейса и многое другое. Вместо того, чтобы покупать несколько вариантов поставки для командной разработки, как приходилось делать в случае с VS 2008, с VS 2010 вы сможете получить аналогичную комбинацию возможностей в одной поставке. Также в эту поставку входит 100 часов в месяц облачных вычислений Azure.  <li><strong>Visual Studio 2010 Ultimate с подпиской MSDN</strong>: сюда входит все, что включено в Premium-версию, плюс дополнительные возможности для разработчиков, тестировщиков и архитекторов, такие как Intellitrace (ранее называвшийся Historical Debugging), новые инструменты для разработки архитектуры системы (UML, обнаружение сервисов), управление тестовой лабораторией, etc. Также в эту поставку входит 250 часов в месяц облачных вычислений Azure.</li></ul> <h5><u>Поддержка установки на одной машине с VS 2008</u></h5> <p>VS 2010 и .NET 4.0 могут быть установлены на одной машине с VS 2008 и .NET 3.5, при этом 2-я бета VS 2010 и .NET 4.0 никак не затронет ваши существующие проекты разработки, связанные с VS 2008/.NET 3.5. <h5><u>Доступна лицензия для промышленной разработки</u></h5> <p>В выпущенной версии .NET 4 и VS 2010 включена лицензия “go-live”, означающая, что вы можете начать использовать эти продукты для промышленной разработки, а не только ознакомления/тестирования. <h5><u>Резюме</u></h5> <p>VS 2010 и .NET 4.0 привносят ряд очень существенных улучшений и новых возможностей. Цель сегодняшнего выпуска 2-й беты была в том, чтобы как следует поработать над вопросами производительности, стабильности и интеграции всего реализованного набора возможностей. Теперь внимание команды разработки будет сфокусировано на ваших отзывах о продукте и подготовке к выпуску версии релиз-кандидат (RC). Пожалуйста, присылайте нам ваши отзывы о выпущенной 2-й бета-версии. <p>Надеюсь, вы нашли для себя что-то полезное, <p>Скотт <p>P.S. В последнее время я чаще использую Twitter, чтобы рассказывать о предстоящих планах и публиковать ссылки на интересные ресурсы. Вы можете следить за моими публикациями на Twitter по адресу: <a href="https://www.twitter.com/scottgu">https://www.twitter.com/scottgu</a> (@scottgu это мой ник на Twitter) <p><a href="https://weblogs.asp.net/scottgu/archive/2009/10/19/vs-2010-and-net-4-0-beta-2.aspx">оригинал статьи</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Представляем библиотеку Microsoft Ajax (6-ю версию для предварительного ознакомления) и утилиту Microsoft Ajax Minifier</title>
      <link>https://docs.microsoft.com/archive/blogs/ruscottgu/microsoft-ajax-6-10</link>
      <pubDate>Thu, 15 Oct 2009 12:48:00 GMT</pubDate>
      <dc:creator><![CDATA[Gaidar Magdanurov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ruscottgu/2009/10/15/microsoft-ajax-6-10/</guid>
      <description><![CDATA[Сегодня команда ASP.NET выпустила существенное обновление библиотеки Microsoft Ajax (6-ю версию для...]]></description>
      <content:encoded><![CDATA[<p>Сегодня команда ASP.NET <a href="https://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488">выпустила существенное обновление</a> библиотеки Microsoft Ajax (6-ю версию для предварительного ознакомления). Это обновление включает целый ряд новых возможностей и улучшений нашей библиотеки AJAX; оно может использоваться с любой версией ASP.NET (включая ASP.NET 2.0, 3.5 и 4.0), а также в проектах ASP.NET Web Forms и ASP.NET MVC. Сегодняшний выпуск включает следующие функциональные улучшения: <ul> <li><em>Улучшенный императивный синтаксис</em>: новый упрощенный синтаксис кода для создания элементов управления, выполняемых на клиенте.  <li><em>Загрузчик клиентских скриптов</em>: новый загрузчик скриптов, выполняемых на стороне клиента, который динамически загружает все файлы JavaScript, необходимые для клиентского элемента управления или библиотеки, а также выполняет скрипты в нужной последовательности.  <li><em>Улучшенная интеграция с jQuery</em>: теперь все элементы управления Microsoft Ajax автоматически представляются как плагины jQuery.</li></ul> <p>В дополнение к улучшению библиотеки мы также выпустили новую беплатную утилиту - Microsoft AJAX Minifier. Эта утилита позволит вам существенно улучшить производительность ваших веб-сайтов за счет уменьшения размера ваших файлов JavaScript. Утилита может запускаться и из командной строки, и как задание MSBuild в Visual Studio, которое вы можете настроить для ваших проектов VS, чтобы автоматически уменьшать размер ваших файлов JavaScript при каждой сборке проекта. <h5><u>Использование библиотеки Microsoft AJAX (6-й версии для предварительного ознакомления)</u></h5> <p>Начасть создавать приложения с вышедшей версией библиотеки Microsoft Ajax вы можете двумя путями: <p>1) Посетите ASP.NET CodePlex и <a href="https://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488">скачайте</a> файлы библиотеки (туда также входит обширный набор примеров кода). <p>2) Получите скрипты библиотеки Microsoft Ajax напрямую из сети доставки контента Microsoft Ajax (Content Delivery Network, CDN). Для этого вам всего лишь нужно добавить следующий тег script в страницу .aspx или .html: <p>&lt;script src=”<a href="https://ajax.microsoft.com/ajax/beta/0910/Start.js">https://ajax.microsoft.com/ajax/beta/0910/Start.js</a>” type=”text/javascript”&gt;&lt;/script&gt; <p>Чтобы узнать больше о Microsoft AJAX CDN, прочитайте <a href="https://blogs.msdn.com/ruscottgu/archive/2009/09/15/microsoft-ajax-cdn.aspx">сообщение</a>, опубликованное в моем блоге в прошлом месяце, или посетите <a href="https://www.asp.net/ajax/cdn">https://www.asp.net/ajax/cdn</a>. <h5><u>Улучшения императивного синтаксиса кода с этим выпуском</u></h5> <p>Команда ASP.NET получила отклики от сообщества разработчиков о том, что многие при написании кода создания элементов управления, выполняющихся на стороне клиента, предпочли бы использовать имеративный подход (в противовес подходу с декларативным синтаксисом). С сегодняшним выпуском библиотеки мы представляем простой императивный синтаксис кода для создания клиентских элементов управления и связывания их с элементами HTML на странице. Для этого синтаксиса полностью поддерживается JavaScript Intellisense как в VS 2008, так и в VS 2010. <p>Ниже приведен пример императивного кода, который вы теперь сможете писать для программного создания на стороне клиента элемента управления DataView, отображающего данные, получаемые от веб-сервиса на базе WCF: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_4DEF31CE.png"> <p>Приведенный выше код создает экземпляр элемента управления Microsoft Ajax DataView и присоединяет его к HTML-элементу &lt;div&gt; с идентификатором “imageView”. URL веб-сервиса WCF указывается в свойстве “dataProvider”, а название вызываемого метода сервиса - в свойстве “fetchOperation”. Свойство “autoFetch” указывает, что элемент управления должен автоматически после загрузки привязываться к веб-сервису WCF. <p>Ниже приводится HTML-элемент &lt;div&gt; с идентификатором “imageView”, к которому присоединяется элемент управления DataView. Этот &lt;div&gt; содержит шаблон, который будет использоваться для отображения каждого элемента данных, получаемого от веб-сервиса (обратите внимание: возможность использовать шаблоны была представлена нами в вышедшей ранее версии Microsoft Ajax для предварительного ознакомления): <p><img src="https://weblogs.asp.net/blogs/scottgu/image_4C3E65FA.png"> <p>Выражения {{ Uri }} и {{ Name }} в приведенном шаблоне заменяются свойствами Name и Uri изображений, получаемых от веб-сервиса. Префикс пространства имен для атрибута “sys:src” элемента &lt;img&gt; используется для того, чтобы браузеры не попытались загрузить изображение по фактическому пути <i>{Uri}</i>. Значение атрибута sys:src попадает в атрибут src после загрузки шаблона. <p>Когда страница отрендерится в браузере, мы получим простую фотогалерею, как на рисунке ниже: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_6AA8A6E3.png"> <p>Если же вы не хотите использовать в шаблонах декларативный синтаксис, то можете модифицировать его, остатвив лишь HTML-разметку, как показано ниже (больше никаких выражений в {{ }}): <p><img src="https://weblogs.asp.net/blogs/scottgu/image_64BDDD7D.png"> <p>Затем при создании элемента управления DataView вы можете указать обработчик события itemRendered: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_23432B24.png"> <p>Вы можете реализовать обработчик события “imageRendered”, как показано ниже, и использовать метод Sys.bind() для программного задания значений параметров тегов &lt;img&gt; и &lt;span&gt; в шаблоне: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_01775293.png"> <p>За счет этого вы сможете оставить в шаблоне исключительно HTML-код и все равно отображать во время выполнения ту же фотогалерею. <h5><u>Использование загрузчика клиентских скриптов Microsoft Ajax</u></h5> <p>Библиотека клиентских скриптов Microsoft AJAX теперь разделена на несколько файлов JavaScript, за счет чего вы можете загружать и использовать лишь те файлы скриптов, которые вам на самом деле нужны, тем самым сокращая объем загружаемых данных. <p>Однако, ручное добавление всех файлов скриптов, которые нужны для работы элементов управления Ajax, может быть утомительной и чреватой ошибками работой. Для упрощения использования как элементов управления, так и отдельных компонентов библиотеки мы с сегодняшним выпуском представляем новый загрузчик клиентских скриптов. Этот загрузчик поможет вам автоматически загружать все файлы скриптов, необходимые для элементов управления, выполняемых на стороне клиента, а также позволит выполнять эти скрипты после загрузки страницы в нужной последовательности. <p>К примеру, приведенная ниже страница использует этот загрузчик для загрузки всех файлов скриптов, необходмых для работы элемента управления “watermark” (“водяной знак”), а затем связывает этот элемент управления с текстовым полем ввода &lt;input&gt;: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_7FC686BE.png"> <p>Обратите внимание на вызов метода Sys.require(). Когда вы вызываете Sys.require(), вы указываете название клиентского компонента (либо массив клиентских компонентов), который хотите загрузить. Затем клиентский загрузчик sys.require() автоматически скачивает все необходимые файлы скриптов, распараллеливая этот процесс (что позволяет быстрее загрузить ваши скрипты и избежать блокирования рендеринга страницы). Когда все необходимые для элемента управления скрипты будут загружены, происходит вызов метода Sys.onReady() и создается элемент управления watermark. <p>В примере выше мы связываем элемент управления “watermark” с текстовым полем ввода &lt;input&gt; с идентификатором “name”. Во время выполнения этот элемент управления приводит к появлению у поля ввода "водяного знака", автоматически исчезающего, как только пользователь установит фокус на это поле и начнет вводить текст: <p><img src="https://weblogs.asp.net/blogs/scottgu/clip_image006_0B7BCDF1.jpg"> <p>У загрузчика клиентских скриптов есть множество расширенных возможностей, включая автоматическое комбинирование скриптов и отложенную загрузку. Он также “понимает”, надо ли загружать рабочую или отладочную версию библиотеки. Кроме того, он позволяет вам зарегистрировать ваши собственные библиотеки и также автоматически загружать их с использованием синтаксиса Sys.require(). <h5><u>Использование элементов управления библиотеки Microsoft Ajax совместно с jQuery</u></h5> <p>jQuery поставляется Microsoft как часть стандартной поставки ASP.NET MVC, а также по умолчанию добавляется в новые проекты ASP.NET Web Forms, создаваемые в Visual Studio 2010. <p>С сегодняшним выпуском для предварительного ознакомления мы существенно облегчили интеграцию jQuery с элементами управления Microsoft Ajax, что позволит разработчиками, применяющим jQuery, использовать элементы управления Microsoft Ajax в привычном синтаксисе API плагинов для jQuery. Это достигается за счет того, что теперь все элементы управления Microsoft Ajax автоматически доступны и как плагины jQuery. Иными словами, когда вы добавляете на страницу jQuery, вы можете использовать элементы управления Microsoft Ajax так же, как и любые другие jQuery-плагины. <p>Приведенный ниже код демонстрирует, как вы можете использовать jQuery для создания DataView, отображающего данны от веб-сервиса WCF (используя синтаксис плагинов jQuery): <p><img src="https://weblogs.asp.net/blogs/scottgu/image_57672E9D.png"> <p>Обратите внимание, что в приведенном примере я загружаю jQuery с использованием API клиентского загрузчика Sys.require(). Вы можете загружать jQuery с помощью нового клиентского загрузчика или же можете просто включить библиотеку jQuery в код страницы с помощью стандартного тега &lt;script&gt;. <p>После загрузки jQuery элементы управления библиотеки Microsoft Ajax автоматически становятся доступны как плагины jQuery. Это означает, что вы можете создавать и присоединять элементы управления Microsoft Ajax, используя стандартный синтаксис для плагинов jQuery (как в примере выше), а также получаете полную интеграцию с синтаксисисом jQuery selector. <h5><u>Сокращение размера файлов JavaScript с помощью Microsoft Ajax Minifier</u></h5> <p>Есть два основных способа сокртить размер загружаемых файлов JavaScript: сжатие и уменьшение самих файлов (minification). <p>Когда ваш сайт работает под управлением IIS 7.0 на Windows Server, вы можете настроить IIS для автоматического сжатия ваших файлов JavaScript с использованием GZIP, что дает существенное повышение производительности сайта и сокращает размер загружаемых данных. Однако, вы можете получить дополнительный выйгрыш в производительности за счет использования как сжатия данных, так и <i>уменьшения</i> (minification) ваших файлов JavaScript. Эти дополнительные преимущества описываются в великолепной книге Стива Саундерса (Steve Sounders) <a href="https://www.amazon.com/dp/0596529309?tag=scoblo04-20&amp;camp=0&amp;creative=0&amp;linkCode=as4&amp;creativeASIN=0596529309&amp;adid=081D052PBM7GF6D8JK4F&amp;">High Performance Web Sites</a><b> (Высокопроизводительные веб-сайты)</b>. <p>Помимо новой версии библиотеки Microsoft Ajax мы сегодя также выпустили новую бесплатную утилиту <a href="https://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488">Microsoft Ajax Minifier</a>, которая может помочь существенно сократить размер ваших файлов JavaScript. Она была создана Роном Логоном (Ron Logon), работающим в команде MSN. Вы можете бесплатно <a href="https://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488">загрузить Microsoft Ajax Minifier</a> с сайта ASP.NET на CodePlex. <p>Приведенный ниже скриншот показывает результаты уменьшения размера стандартной библиотеки jQuery с помощью различных подобных утилит, таких как JSMin Дугласа Крокфорда (Douglas Crockford), Packer Дина Эдварда (Dean Edward) и YUI Compressor. Два файла в конце списка были уменьшены с помощью утилиты <a href="https://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488">Microsoft Ajax Minifier</a>. Обратите внимание, что эта она уменьшила размер jQuery со 125 KB до всего 53 KB. <p><img src="https://weblogs.asp.net/blogs/scottgu/image_359B560C.png"> <p><a href="https://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488">Microsoft Ajax Minifier</a> поддерживает два уровня уменьшения: обычный (normal) и гиперсжатие (hypercrunched). При обычном уменьшении Microsoft Ajax Minifier удаляет все незначащие пробелы, комментарии, фигурные скобки и точки с запятой. В режиме гиперсжатия утилита становится более агрессивна в уменьшении размера файлов JavaScript, минимизируя названия локальных переменных и удаляя код, который никогда не получит управления. <p>Вот пример файла JavaScript: <p><img src="https://weblogs.asp.net/blogs/scottgu/image_1EF907C5.png"> <p>А вот как этот файл будет выглядет после обработки с помощью Microsoft Ajax Minifier (с включенным гиперсжатием): <p><img src="https://weblogs.asp.net/blogs/scottgu/image_5254CB21.png"> <p>Обратите внимание, что все незначащие пробелы были удалены, а параметры функции firstValue и secondValue были переименованы в b и a. <p>В <a href="https://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488">поставку Microsoft Ajax Minifier</a> входят следующие компоненты: <ul> <li>ajaxmin.exe – утилита командной строки для уменьшения файлов JavaScript.  <li>ajaxmintask.dll – задание MSBuild для уменьшения файлов JavaScript в проектах Visual Studio.  <li>ajaxmin.dll – компонент, который вы можете использовать в ваших приложениях C# или VB.NET для уменьшения файлов JavaScript.</li></ul> <p>После установки Microsoft Ajax Minifier вы можете воспользоваться утилитой командной строки для “ручного” запуска уменьшения файлов JavaScript. <p>Вы также можете выбрать опцию добавления Microsoft Ajax Minifier как задания MSBuild в Visual Studio. Это позволит вам автоматически уменьшать ваши файлы JavaScript каждый раз, когда вы выполняете сборку вашего проекта Visual Studio. <h5><u>Резюме</u></h5> <p>В выпущенной сегодня версии библиотеки Microsoft Ajax реализовано несколько впечатляющих новых возможностей для разработчиков кода, выполняющегося на стороне клиента. Новый упрощенный императивный синтаксис должен понравиться разработчикам JavaScript. Загрузчик клиентских скриптов позволит намного проще создавать элементы управления, выполняющиеся на стороне клиента, и оптимизировать загрузку файлов скриптов. А интеграция с jQuery даст разработчикам возможность, использующим эту библиотеку, получить преимущества от использования клиентских элементов управления, шаблонов и возможностей доступа к данным, реализованным в библиотеке Microsoft Ajax, без необходимости менять свой стиль программирования. <p>Наконец, новая утилита Microsoft Ajax Minifier позволит существенно улучшить производительность ваших приложений Ajax за счет сокращения размера файлов JavaScript. Вы можете использовать эту утилиту как вручную из командной строки, так и автоматически при сборке проектов в Visual Studio. <p>Чтобы узнать еще больше подробностей, прочитайте <a href="https://weblogs.asp.net/bleroy/archive/2009/10/15/entirely-unobtrusive-and-imperative-templates-with-microsoft-ajax-4-preview-6.aspx">статью в блоге Бертрана Ле Роя</a> (Bertrand Le Roy). <a href="https://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488">Щелкните здесь</a>, чтобы загрузить 6-ю версию для предварительного ознакомления библиотеки Microsoft Ajax и новую утилиту Microsoft Ajax Minifier. <p>Надеюсь, вы нашли для себя что-то полезное, <p>Скотт <p>P.S. Помимо блога, я в последнее время еще использую Twitter, чтобы публиковать краткие заметки и новые ссылки. Следить за моими публикациями на Twitter вы можете здесь: <a href="https://www.twitter.com/scottgu">https://www.twitter.com/scottgu</a> (@scottgu - это мой псевдоним на twitter) <p><a href="https://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx">оригинал статьи</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Маршрутизация URL c ASP.NET 4 Web Forms (из серии статей про VS 2010 и .NET 4.0)</title>
      <link>https://docs.microsoft.com/archive/blogs/ruscottgu/url-c-asp-net-4-web-forms</link>
      <pubDate>Mon, 12 Oct 2009 13:15:00 GMT</pubDate>
      <dc:creator><![CDATA[Gaidar Magdanurov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ruscottgu/2009/10/12/url-c-asp-net-4-web-forms/</guid>
      <description><![CDATA[[Помимо блога, я в последнее время еще использую Twitter, чтобы публиковать краткие заметки и новые...]]></description>
      <content:encoded><![CDATA[<P><EM>[Помимо блога, я в последнее время еще использую Twitter, чтобы публиковать краткие заметки и новые ссылки. Следить за моими публикациями на Twitter вы можете здесь: <A href="https://www.twitter.com/scottgu" mce_href="https://www.twitter.com/scottgu">https://www.twitter.com/scottgu</A> (@scottgu - это мой псевдоним на twitter)]</EM> 
<P>Это восьмая из <A href="https://blogs.msdn.com/ruscottgu/archive/2009/08/25/vs-2010-net-4.aspx" mce_href="https://blogs.msdn.com/ruscottgu/archive/2009/08/25/vs-2010-net-4.aspx">серии статей</A> про грядущий выпуск VS 2010 и .NET 4. В сегодняшней публикации я расскажу об одной замечательной возможности среды времени выполнения ASP.NET 4, а именно о возможности использовать маршрутизацию URL (URL routing) со страницами на базе Web Forms. 
<H5><U>Что такое маршрутизация URL?</U></H5>
<P>Маршрутизация URL - это возможность, впервые появившаяся в ASP.NET 3.5 SP1 и активно применяемая в приложениях ASP.NET MVC, чтобы сделать используемые в них URL ясными и учитывающими поисковую оптимизацию - в стиле “web 2.0”. Маршрутизация URL позволяет настроить приложение на прием запросов с URL, которые не соответствуют реальным файлам приложения. Вместо этого вы можете с помощью маршрутизации определить URL, которые семантически значимы для пользователей и могут помочь в поисковой оптимизации сайтов. 
<P>К примеру, URL для обычной страницы, отображающей категории продуктов, мог бы выглядеть так: 
<P><EM><A href="https://www.mysite.com/products.aspx?category=software" mce_href="https://www.mysite.com/products.aspx?category=software">https://www.mysite.com/products.aspx?category=software</A></EM> 
<P>С использованием движка маршрутизации URL в ASP.NET 4 вы сможете для отображения той же информации настроить приложение на прием таких запросов: 
<P><EM><A href="https://www.mysite.com/products/software" mce_href="https://www.mysite.com/products/software">https://www.mysite.com/products/software</A></EM> 
<P>В ASP.NET 4.0 запросы, как в приведенном примере, могут быть сопоставлены как с классами-контроллерами ASP.NET MVC, так и со страницами на базе ASP.NET Web Forms. 
<H5><U>Сопоставление запросов с использованием ASP.NET MVC</U></H5>
<P>Движок маршрутизации URL, появившийся в ASP.NET 3.5 SP1, предоставляет мощные возможности для обработки входящих запросов. Обычно для регистрации/отображения URL, соответствующих определенному формату, и сопоставленных с ними обработчиков вам приходилось писать код, выполняемый при запуске приложения. 
<P>Ниже приведен пример того, как сегодня вы можете использовать ASP.NET MVC для сопоставления URL <EM>/products/software</EM> с классом-контроллером под названием “Products”, у которого есть метод “Browse”: 
<P><IMG title=step1 alt=step1 src="https://weblogs.asp.net/blogs/scottgu/step1_2C298E39.png" mce_src="https://weblogs.asp.net/blogs/scottgu/step1_2C298E39.png"> 
<P>Первый параметр “products-browse” вспомогательного метода MapRoute() является дружественным именем маршрута. Второй параметр <EM>“products/{category}”</EM> - это фильтр для URL, соответствующий URL <EM>/products/software</EM> и рассматривающий второй сегмент URL как значение параметра “category”. Этот параметр затем будет передан на обработку в метод Browse() класса ProductsController. 
<H5><U>Сопоставление запросов с использованием ASP.NET Web Forms</U></H5>
<P>Теперь ASP.NET 4.0 также позволяет использовать движок маршрутизации URL для сопоставления не только с контроллерами ASP.NET MVC, но и со страницами на базе ASP.NET Web Forms. 
<P>Ниже приведен пример того, как вы можете использовать новый вспомогательный метод <EM>MapPageRoute()</EM> в ASP.NET 4.0 для сопоставления URL <EM>/products/software</EM> со страницей “Products.aspx”, расположенной в корневом каталоге приложения: 
<P><IMG title=step2 alt=step2 src="https://weblogs.asp.net/blogs/scottgu/step2_5866151D.png" mce_src="https://weblogs.asp.net/blogs/scottgu/step2_5866151D.png"> 
<P>Здесь первые два параметра вспомогательного метода <EM>MapPageRoute()</EM> - те же, что и у <EM>MapRoute()</EM>. Первый параметр представляет дружественное имя маршрута, а второй задает формат URL для поиска соответствий. Третий параметр, между тем, указывает на страницу Products.aspx, которая будет обрабатывать запросы вместо класса-контроллера. Вы также можете указать <EM>MapPageRoute()</EM> дополнительные параметры, чтобы воспользоваться преимуществами “ограничений маршрута” и предоставить “значения параметров по умолчанию” точно так же, как вы можете сделать это в регистрациях маршрутов на базе ASP.NET MVC. 
<P>Для страницы Products.aspx вы затем можете написать код, как в примере ниже, использующий свойство <EM>Page.RouteData</EM> в ASP.NET 4.0 для получения значения параметра “category”, сопоставленного с фильтром URL <EM>/products/{category}</EM>, и после этого связать полученное значение с категориями продуктов, чтобы отобразить их: 
<P><IMG title=step3 alt=step3 src="https://weblogs.asp.net/blogs/scottgu/step3_00B54772.png" mce_src="https://weblogs.asp.net/blogs/scottgu/step3_00B54772.png"> 
<P>В дополнение к программному доступу к параметрам входящих запросов при помощи кода, как в примере выше, вы также можете воспользоваться преимуществами нового декларативного элемента управления &lt;asp:routeparameter&gt; с любым элементом управления ASP.NET, использующим DataSource, чтобы декларативно связать его со значением из маршрута. К примеру, ниже мы используем выражение с &lt;asp:routeparameter&gt;, чтобы связать параметр @category оператора select с параметром <EM>/products/{category}</EM> в маршруте: 
<P><IMG title=step4 alt=step4 src="https://weblogs.asp.net/blogs/scottgu/step4_3F3A9518.png" mce_src="https://weblogs.asp.net/blogs/scottgu/step4_3F3A9518.png"> 
<H5><U>Получение URL запросов из ASP.NET Web Form</U></H5>
<P>Движок маршрутизации URL в ASP.NET может использоваться как для сопоставления входящих запросов с обработчиками в коде, так и для программной генерации исходящих URL с применением тей же логики регистрации соответствий. 
<P>В примере выше когда мы устанавливали соответствие для URL <EM>/products/{category}</EM>, мы дали маршруту “дружественное имя” “products-browse”. Это позволяет нам теперь также использовать новый вспомогательный метод <EM>Page.GetRouteUrl()</EM>, чтобы найти маршрут в системе маршрутизации URL, опционально указывая его параметры, и затем получить настоящий URL, который соответствует нашему сгенерированному URL на базе маршрута. Например, нижеприведенный код получит URL “/products/software”: 
<P><IMG title=step6 border=0 alt=step6 src="https://weblogs.asp.net/blogs/scottgu/step6_1D6EBC87.png" mce_src="https://weblogs.asp.net/blogs/scottgu/step6_1D6EBC87.png"> 
<P>Вы можете обращаться к упомянутому вспомогательному методу как из ваших файлов code-behind, так и из файлов .aspx. 
<P>Теперь также появился нобор методов <EM>Response.RedirectToRoute()</EM>, которые вы можете использовать, чтобы перенаправить пользователей по определенному маршруту (независимо от того, обрабатывается ли этот маршрут приложением на базе MVC или Web Forms) и при желании передать ему дополнительные параметры. 
<H5><U>Обработка сценариев с использованием обратной передачи</U></H5>
<P>Маршрутизация URL в ASP.NET 4.0 полностью поддерживает сценарии с использованием обратной передачи (PostBack). Элемент управления &lt;form runat=”server”&gt; автоматически сгенерирует тот же URL, что привел к рендерингу страницы. К примеру, если вы получаете доступ к странице с помощью URL <EM>/products/software</EM>, то любой выполняющийся на стороне сервера элемент управления &lt;form runat=”server”&gt; на этой странице сгенерирует для клиента HTML-элемент &lt;form action=”/products/software”&gt; - это означает, что любые сценарии с использованием обратной передачи сохранят исходный URL страницы. 
<P>За счет этого становится по-настоящему просто поддеживать в сценариях с использованием обратной передачи и Web Forms ясные, учитывающие поисковую оптимизацию URL, и у вас пропадет необходимость использовать различные трюки, к которым сегодня прибегают разработчики, чтобы достичь аналогичных эффектов при работе с модулями переписывания URL (URL rewriting modules). 
<H5><U>Резюме</U></H5>
<P>В ASP.NET 4.0 стало по-настоящему просто реализовать ясные, поддерживающие поисковую оптимизацию URL как в приложениях ASP.NET MVC, так и ASP.NET Web Forms (у вас также могут быть приложения, сочетающие эти два подхода). 
<P>Движок маршрутизации URL позволяет вам с легкостью зарегистрировать URL любых видов и форматов и сопоставить им любые обработчики, какие вы пожелаете. А поскольку этот движок может использоваться как для сопоставления с URL входящих запросов, так и для генерации исходящих URL, вы можете на более позднем этапе разработки изменить сопоставления URL и при этом не беспокоиться о необходимости модификации какого-либо кода страниц или классов-контроллеров, чтобы отразить сделанные изменения; это позволит вам гораздо проще создавать приложения с поддержкой поисковой оптимизации. 
<P>Надеюсь, вы нашли для себя что-то полезное, 
<P>Скотт 
<P><A href="https://weblogs.asp.net/scottgu/archive/2009/10/13/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series.aspx" mce_href="https://weblogs.asp.net/scottgu/archive/2009/10/13/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series.aspx">оригинал статьи</A></P>]]></content:encoded>
    </item>
    <item>
      <title>Представляем программу WebsiteSpark</title>
      <link>https://docs.microsoft.com/archive/blogs/ruscottgu/websitespark</link>
      <pubDate>Wed, 23 Sep 2009 18:45:00 GMT</pubDate>
      <dc:creator><![CDATA[Gaidar Magdanurov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ruscottgu/2009/09/23/websitespark/</guid>
      <description><![CDATA[Представляем программу WebsiteSpark  Я рад сообщить вам о новой программе – WebsiteSpark – которую...]]></description>
      <content:encoded><![CDATA[<p><b>Представляем программу </b><b>WebsiteSpark</b><b> </b> <p>Я рад сообщить вам о новой программе – <a href="https://www.microsoft.com/web/websitespark/">WebsiteSpark</a> – которую Microsoft запускает сегодня.  <p><a href="https://www.microsoft.com/web/websitespark/">WebsiteSpark</a> создана для индивидуальных веб-разработчиков и компаний-разработчиков, которые создают веб-приложения на заказ. Она даст вам возможность получать программное обеспечение, поддержку и доступ к бизнес-ресурсам Microsoft без предварительной оплаты на протяжении трех лет, что позволит вам расширить ваш бизнес и создавать великолепные решения на базе ASP.NET, Silverlight, SharePoint и PHP, а также <a href="https://www.microsoft.com/web/gallery/default.aspx">приложения с открытым кодом</a>, созданные на их основе.  <p><b><u>Что предоставляет эта программа?</u></b><b></b> <p><a href="https://www.microsoft.com/web/websitespark/">WebSiteSpark</a> предоставляет лицензии на ПО, которыми вы можете пользоваться в течение трех лет. После начала участия в программе вы сможете загрузить и сразу же начать использовать следующие программные продукты Microsoft:  <ul> <li>3 пользовательские лицензии на Visual Studio 2008 Professional Edition  <li>1 пользовательскую лицензию на Expression Studio 3 (включающую Expression Blend, Sketchflow и Web)  <li>2 пользовательские лицензии на Expression Web 3  <li>4 процессорные лицензии на Windows Web Server 2008 R2  <li>4 процессорные лицензии на SQL Server 2008 Web Edition <li>Панель управления DotNetPanel (облегчает удаленное управление вашими серверами) </li></ul> <p>Лицензии на Windows Server и SQL Server могут быть использованы для разработки <i>и</i> для промышленной эксплуатации. Вы можете использовать собственные физические сервера или же использовать лицензии для получения услуг хостинга от сторонних поставщиков. С помощью <a href="https://www.microsoft.com/web/websitespark/">WebsiteSpark</a> вы можете легко найти компании, предоставляющие хостинг, которые также участвуют в этой программе и которые смогут использовать ваши лицензии для обеспечения работы ваших веб-сайтов на выделенных или виртуальных серверах.  <p>В дополнение к программному обеспечению, <a href="https://www.microsoft.com/web/websitespark/">WebsiteSpark</a> предоставляет вам возможность расти и развивать ваш бизнес, участвуя в партнерской программе (к примеру, вы сможете предоставить отзывы клиентов о вас через наши партнерские программы). Сюда также входят услуги поддержки (включая 2 инцидента, которые будут обработаны профессиональной службой поддержки) и бесплатное обучение продуктам в онлайн.  <p><b><u>Кто может участвовать в этой программе?</u></b><b></b> <p>Программа <a href="https://www.microsoft.com/web/websitespark/">WebSiteSpark</a> доступна для независимых веб-разработчиков и небольших компаний, занимающихся веб-разработкой. Есть лишь два условия для вступления в программу:  <ol> <li>Ваша компания должна заниматься разработкой веб-приложений по заказу.  <li>В вашей компании должно быть на данный момент менее 10 сотрудников. </li></ol> <p>Если вы удовлетворяете этим условиям, то вступить в программу в можете прямо сегодня, посетив <a href="https://www.microsoft.com/web/websitespark/">сайт WebsiteSpark</a>.  <p>При вступлении в программу вы должны либо предоставить рекомендацию другой компании (к примеру, компании, предоставляющей услуги хостинга, либо уже существующей компании-партнера Microsoft), либо указать код направления, полученный вами на каком-либо мероприятии или же выданный сотрудником Microsoft. Такой код вы можете получить, отправив письмо на <a href="mailto:webspark@microsoft.com">webspark@microsoft.com</a>, затем вы можете использовать его для вступления в программу на <a href="https://www.microsoft.com/web/websitespark/">сайте WebsiteSpark</a>. После вступления вы сможете сразу же загрузить и начать использовать программное обеспечение, а также воспользоваться возможностями, предоставляемыми в рамках партнерских программ.  <p>Если у вас возникнут какие-либо сложности со вступлением в программу, вы можете написать мне (<a href="mailto:scottgu@microsoft.com">scottgu@microsoft.com</a>), и я постараюсь найти кого-нибудь, кто сможет вам помочь.  <p><b><u>А что же будет через 3 года?</u></b><b></b> <p>Программа WebsiteSpark расчитана на 3 года. Она не предусматривает <u>обязательств</u> продолжать использовать что-либо из предоставленного ПО по истечение трех лет, а также не предусматривает какой-либо платы за его использование в течение этих трех лет, кроме взноса в размере $100, взимаемого за участие в программе в конце ее трехлетнего срока.  <p>По истечении трех лет участники программы WebsiteSpark могут при желании приобрести все ПО, предоставленное в рамках программы WebsiteSpark, в виде одного пакета стоимостью $999 в год. В него войдут 3 копии VS Professional, 1 копия Expression Studio (включая Blend и Sketchflow), 2 копи Expression Web, а также 4 процессорных лицензии на Windows Web Server 2008 и 4 процессорных лицензии на SQL Server Web edition, которые могут использоваться для промышленной эксплуатации.  <p>Если же вы захотите приобрести лишь серверные лицензии для запуска ваших приложений, вы сможете воспользоваться специальным предложением: $199 в год за 1 процессорную лицензию на Windows Web Server <i>и</i> 1 процессорную лицензию на SQL Server Web edition. Вы сможете купить необходимое количество лицензий из предоставленного пакета по цене $199 в год за каждую.  <p><b><u>Резюме</u></b><b></b> <p>Программа <a href="https://www.microsoft.com/web/websitespark/">WebsiteSpark</a> дополняет две предыдущие успешные “Spark”-программы, которые мы запустили ранее, - <i><a href="https://www.microsoft.com/bizspark/">BizSpark</a></i> для стартапов и <a href="https://www.dreamspark.com/default.aspx"><i>DreamSpark</i></a> для студентов.  <p>Появившись во времена непростых экономических условий, <a href="https://www.microsoft.com/web/websitespark/">WebsiteSpark</a> поможет поддержать компании и разработчиков, предоставляя бизнес-ресурсы, обучение и ПО, необходимые для начала и развития успешного бизнеса на базе Веб-платформы Microsoft.  <p>Посетите <a href="https://www.microsoft.com/web">www.microsoft.com/web</a>, чтобы больше узнать о Веб-платформе Microsoft, а также загрузить и установить новый <a href="https://www.microsoft.com/web/downloads/platform.aspx">Установщик веб-платформы Microsoft V2</a>, выпущенный нами сегодня; с его помощью вы легко сможете подготавливать веб-сервера и рабочие станции для веб-разработки. Затем вы также можете ознакомиться, загрузить и начать использовать веб-приложения из <a href="https://www.microsoft.com/web/gallery/default.aspx">Галереи веб-приложений Windows</a>.  <p>Надеюсь, вы нашли для себя что-то полезное,  <p>Скотт  <p>P.S. Помимо блога, я в последнее время еще использую Twitter, чтобы публиковать краткие заметки и новые ссылки. Следить за моими публикациями на Twitter вы можете здесь: <a href="https://www.twitter.com/scottgu">https://www.twitter.com/scottgu</a> (@scottgu - это мой псевдоним на twitter)  <p><a href="https://weblogs.asp.net/scottgu/archive/2009/09/24/announcing-the-websitespark-program.aspx">оригинал статьи</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Совет: увеличьте свободное пространство монитора при работе в VS, отключив навигационную панель HTML</title>
      <link>https://docs.microsoft.com/archive/blogs/ruscottgu/113</link>
      <pubDate>Sun, 20 Sep 2009 16:50:00 GMT</pubDate>
      <dc:creator><![CDATA[Gaidar Magdanurov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ruscottgu/2009/09/20/113/</guid>
      <description><![CDATA[Ниже представлен совет, который я сегодня опубликовал через свой аккаунт на Twitter. Похоже, он...]]></description>
      <content:encoded><![CDATA[<p>Ниже представлен совет, который я сегодня опубликовал через свой <a href="https://twitter.com/scottgu">аккаунт на Twitter</a>. Похоже, он заинтересовал определенное число людей, так что я решил опубликовать его и в своем блоге. <h5><u>Навигационная панель HTML в VS 2008</u></h5> <p>По умолчанию при работе с исходным кодом HTML в VS 2008 и в Express-редакции Visual Web Developer 2008 непосредственно над областью с редактируемым HTML-кодом отображается несколько выпадающих списков: <p><img src="https://weblogs.asp.net/blogs/scottgu/step1_thumb_70F5E3B7.png"> <p>Этот набор выпадающих списков называется "навигационной панелью" (Navigation Bar) и позволяет в редакторе HTML-кода в VS 2008 переходить между функциями и методами, определенными в этом HTML-коде. Сюда входят как выполняемые на клиенте функции JavaScript, определенные непосредственно в файле .aspx/.html, так и выполняемые на сервере методы, определенные непосредственно в файле .aspx при работе без code-behind файлов. <h5><u>Отключение навигационной панели HTML и возврат кусочка полезной площади экрана</u></h5> <p>Лично я не нахожу особой пользы в навигационной панели HTML, поскольку я стремлюсь не определять функции JavaScript непосредственно в HTML-файлах (вместо этого я использую более ненавязчивый подход и помещаю свой код JavaScript в отдельные файлы) и еще я, как правило, использую code-behind файлы вместо того, чтобы помещать весь выполняемый на сервере код обработчиков событий в один-единственный файл. <p>Если в этом вы со мной схожи и не особо часто пользуетесь навигационной панелью, то, думаю, будете рады узнать, что вы можете отключить ее в VS 2008 и вернуть себе порядка 40-50 пикселей, которые можно "отдать" редактору исходного кода HTML. Для этого выберите в VS пункт меню Tools-&gt;Options, перейдите к узлу "Text Editor-&gt;HTML" и снимите галку "Navigation Bar": <p><img src="https://weblogs.asp.net/blogs/scottgu/step2_thumb_407F5F41.png"> <p>После того, как вы это сделаете и нажмете "OK", вы увидите, что выпадающие списки панели исчезли, и у вас появилось больше свободного места на экране: <p><img src="https://weblogs.asp.net/blogs/scottgu/step3_thumb_451569FB.png"> <p>(Внимание: если изменения не проявились сразу, попробуйте закрыть и заново открыть редакторуемый файл HTML/ASP.NET) <p>Надеюсь, вы нашли для себя что-то полезное, <p>Скотт <p>P.S. В VS 2010 (начиная с Beta2) мы по умолчанию скрываем эту навигационную панель в редакторе HTML, если используется стандартный профиль настроек для веб-разработки, но если вы находите ее полезной, то можете вернуть ее через пункт меню Tools-&gt;Options. Также в VS 2010 появился <a href="https://blogs.msdn.com/ruscottgu/archive/2009/09/02/vs-2010-net-4-0.aspx">профиль для веб-разработки с оптимизацией для работы с исходным кодом </a>, который отключает все навигационные и инструментальные панели, а также дизайнеры HTML. <p><a href="https://weblogs.asp.net/scottgu/archive/2009/09/21/tip-trick-increase-your-vs-screen-real-estate-by-disabling-html-navigation-bar.aspx">оригинал статьи</a>. ]]></content:encoded>
    </item>
  </channel>
</rss>