Эффективное использование ASP.NET WebForms 4.0: генерация разметки

Одной из самых важных областей, которые были затронуты в ASP.NET WebForms 4.0 была генерация разметки и задачи, которые лежат вокруг нее. В этой статье дается описание ключевых особенностей ASP.NET, которые дают возможность эффективно управлять генерацией разметки веб-страниц.

Установка мета-тегов

Для более удобной работы с мета-тегами веб-страниц “keywords” и “description” в ASP.NET 4.0 для класса Page были добавлены новые свойства Page.MetaKeywords и Page.MetaDescription. Они представляют значения мета-тегов, которые будут выводиться на странице:

 <head id="Head1" runat="server"> 
  <title>Untitled Page</title> 
  <meta name="keywords" content="These, are, my, keywords" /> 
  <meta name="description" content="This is the description of my page" /> 
</head> 

Кроме использования свойств напрямую в коде для задания значений мета-тегов страниц вы можете использовать декларацию на самой странице:

 <%@ Page Language="C#" AutoEventWireup="true" 
  CodeFile="Default.aspx.cs" 
  Inherits="_Default" 
  Keywords="These, are, my, keywords" 
  Description="This is a description" %>  

Эта декларация переопределит любые значения мета-тегов, если они были заданы ранее в разметке.

Экранирование пользовательского ввода

Для большего удобства и эффективности кода в ASP.NET 4.0 была представлена новая конструкция для выполнения экранирования данных при рендеринге содержимого на странице. Если ранее для экранирования вам приходилось использовать выражения с вызовом специальных функций:

 <%= HttpUtility.HtmlEncode(expression) %> 

то теперь вы можете написать этот код по-другому:

 <%: expression %> 

Это нововведение не только делает код чище и читабельнее, но и облегчает, а значит делает более распространенной практику экранирования потенциально опасных данных, прежде всего пользовательского ввода.

Эффективная работа с CSS

В ASP.NET WebForms 4.0 была проведена значительная работа по улучшению генерации разметки веб-компонентов и страниц. В связи с тем, что данные изменения часто носят фундаментальный характер была введена настройка совместимости, которая позволяет указать в каком режиме работают страницы сайта: в старом для совместимости или в новом для эффективной генерации разметки. Управление параметром совместимости осуществляется через web.config:

 <system.web> 
  <pages controlRenderingCompatibilityVersion="3.5|4.0"/> 
</system.web> 

Значение 3.5 указывает на использование старого режима, значение 4.0 указывает WebForms на требование генерировать новую разметку, что влечет за собой некоторые важные изменения:

  • разметка веб-страниц отображается в режиме XHTML 1.0 Strict;
  • разметка элементов управления, для которых установлено значение Enabled=”False” теперь генерируется по правилам;
  • элементы div, которые генерируются для скрытых полей теперь стилизуются так, чтобы не влиять на пользовательские стили;
  • разметка для элементов управления Menu генерируется на базе семантических стандартов;
  • элементы управления системы валидации не генерируют inline-стили;
  • элементы управления больше не генерируют в разметке атрибут border со значением border=”0”.

Ниже некоторые подробности данных изменений.

Изменения элементов с Enabled=”False”

В режиме генерации разметки ASP.NET WebForms 4.0 элементы, которые не имеют ввода при установке Enabled=”False” будут генерировать разметку:

 <span id="Span1" class="aspnetdisabled">Test</span> 

Для обработки состояния элемента вместо атрибута disabled используется CSS-класс. Это соответствует стандартам. Элементы, которые принимают пользовательский ввод будут генерировать разметку по-старинке.

Скрытие div вокруг hidden-элементов

Ранее для скрытых элементов автоматически генерировался элемент div, который явно или не явно влиял на разметку на странице. В режиме ASP.NET WebForms 4.0 влияние этого элемента сведено к нулю с помощью специального класса, который добавляется при генерации разметки:

 <div class="aspNetHidden">...</div> 

Вы можете самостоятельно определить поведение данных элементов, переопределив значение класса aspNetHidden.

Генерация внешних таблиц для элементов управления

Для многих элементов управления ASP.NET WebForms по умолчанию генерируется разметка со внешней таблицей, в которую помещена разметка самого элемента. Для того, чтобы управлять этим поведением в ASP.NET WebForms 4.0 был добавлен новый параметр, который указывает нужно или нет оборачивать разметку элемента во внешнюю таблицу:

 <asp:FormView ID="FormView1" runat="server" RenderOuterTable="false"> 

Если RenderOuterTable установлен в False, то разметка внешней таблицы генерироваться не будет. Это соответствует семантическим правилам и современным веб-стандартам.

Эффективный рендеринг элементов CheckBoxList и RadioButtonList

В предыдущих версиях ASP.NET элементы управления CheckBoxList и RadioButtonList имели два режима генерации разметки: flow и table. В первом случае элементы оборачивались в теги <span> во втором в теги <td> элемента <table>.

В ASP.NET WebForms 4.0 добавлены новые режимы, которые позволяют генерировать более семантически верную разметку: OrderedList и UnorderedList. Эти режимы оборачивают элементы в теги <li> элементов <ol> и <ul> соответственно:

 <ol id="CheckBoxList1">

  <li><input id="CheckBoxList1_0" type="checkbox" name="CheckBoxList1$0" value="cbl" /><label for="CheckBoxList1_0">CheckBoxList</label></li>
</ol>
    
<ul id="RadioButtonList1">
  <li><input id="RadioButtonList1_0" type="radio" name="RadioButtonList1" value="rbl" /><label for="RadioButtonList1_0">RadioButtonList</label></li>

</ul>
Улучшение генерации разметки элемента Menu

Элемент управления Menu был значительно переработан в ASP.NET WebForms 4.0 для того, чтобы его разметка была семантически верной. Ранее этот элемент отображался на основе набора тегов <table>. В режиме ASP.NET WebForms 4.0 для элемента генерируется разметка на основе списков:

 <div id="Menu1"> 
  <ul> 
    <li><a href="#" onclick="...">Home</a></li> 
    <li><a href="#" onclick="...">About</a></li> 
  </ul> 

</div> 

Заключение

ASP.NET WebForms 4.0 содержит множество механизмов позволяющих сделать разметку более семантически верной и соответствующей стандартам. В новой версии WebForms 4.0 разработчику предлагают широкие возможности по управлению генерацией разметки.