Генерация разметки в ASP.NET 4.0 Андрей Веселов Мета-теги Новые свойства класса Page: MetaKeywords и MetaDescription. <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ASPNETMarkupDemo._Default" MetaKeywords="ASP.NET, WebForms", MetaDescription="Демонстрация генерации разметки" %> public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { this.MetaKeywords = "ASP.NET, WebForms"; this.MetaDescription = "Демонстрация генерации разметки"; } } <head> <title>Demo page</title> <meta name="keywords" content="ASP.NET, WebForms" /> <meta name="description" content="This is the description of my page" /> </head> Изменения в генерации разметки Обратная совместимость с ASP.NET 3.5 <system.web> <pages controlRenderingCompatibilityVersion="3.5 | 4.0" /> </system.web > Генерация разметки в ASP.NET 4.0: • используется режим XHTML 1.0 Strict; • новые правила создания разметки для элементов с Enabled="false"; • элементы div для скрытых полей не влияют на другие секции; • разметка для Menu генерируется на базе семантических стандартов; • элементы контроля значений (validation) не генерируют inline-стили; • не добавляется атрибут border со значением 0. Разметка при Enabled="false" Использование CSS класса aspnetdisabled вместо атрибута disabled: <span id="Span1" class="aspnetdisabled">ASP.NET 4.0 markup demo</span> div вокруг скрытых элементов Использование специального CSS класса aspNetHidden: <div class="aspNetHidden"> … </div> Генерация внешних таблиц Свойство для управления созданием внешних таблиц для элемента: <asp:Login ID="Login1" runat="server" RenderOuterTable="false"> Вывод CheckBoxList и RadioButtonList Свойство для управления созданием внешних таблиц для элемента: <asp:CheckBoxList ID="CheckBoxList1" runat="server" RepeatLayout="Flow | Table | OrderedList | UnorderedList"> … </asp:CheckBoxList> <asp:RadioButtonList ID="RadioButtonList1" runat="server" RepeatLayout="Flow | Table | OrderedList | UnorderedList"> … </asp:CheckBoxList> OrderedList UnorderedList <ol id="CheckBoxList1"> <li>Demo item 1</li> <li>Demo item 2</li> </ol> <ul id="RadioButtonList1"> <li>Demo item 1</li> <li>Demo item 2</li> </ul> • Flow - <span> • Table - <table> Новые в ASP.NET 4.0: • OrderedList - <ol> • UnorderedList - <ul> Меню Вместо <table> в ASP.NET 4.0 используется <ul>: <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal"> <Items> <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home"/> <asp:MenuItem NavigateUrl="~/About.aspx" Text="About"/> </Items> </asp:Menu> <div class="menu" id="NavigationMenu"> <ul class="level1"> <li><a class="level1" href="Default.aspx">Home</a></li> <li><a class="level1" href="About.aspx">About</a></li> </ul> </div> Экранирование ввода Обычная форма записи: <%= HttpUtility.HtmlEncode(message) %> Новая форма записи (начиная с ASP.NET 4.0): <%: message %>