Эффективное использование 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 разработчику предлагают широкие возможности по управлению генерацией разметки.