XhtmlTextWriter 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将可扩展超文本标记语言(XHTML)特定字符(包括派生自 XHTML 的所有 XHTML 模块变体)写入移动设备 ASP.NET 服务器控件的输出流。 重写 XhtmlTextWriter 类,为 ASP.NET 页和服务器控件提供自定义 XHTML 呈现。
public ref class XhtmlTextWriter : System::Web::UI::HtmlTextWriter
public class XhtmlTextWriter : System.Web.UI.HtmlTextWriter
type XhtmlTextWriter = class
inherit HtmlTextWriter
Public Class XhtmlTextWriter
Inherits HtmlTextWriter
- 继承
示例
本节中的代码示例包含四个部分。 第一个示例演示如何创建派生类。 第二个代码示例演示如何创建自定义控件。 第三个代码示例演示如何使用自定义控件。 第四个代码示例提供运行自定义控件所需的代码。
下面的代码示例演示如何创建派生自 XhtmlTextWriter 类的自定义类。 它有两个构造函数,这是直接或间接从 HtmlTextWriter 类继承的所有类的标准。 第一个构造函数采用 TextWriter 对象作为参数并调用第二个构造函数,并传递以下两个参数值:
TextWriter 实例。
HtmlTextWriter.DefaultTabString 属性的值,它定义 XHTML 文本编写器使用的默认行缩进。
此代码示例还演示如何分别替代 OnAttributeRender 和 OnStyleAttributeRender 方法来筛选文本大小和颜色样式。 此外,它还会替代 BeginRender 和 EndRender 方法,以在呈现控件之前和之后编写文本字符串。
using System;
using System.IO;
using System.Web;
using System.Security.Permissions;
using System.Web.UI;
using System.Web.UI.Adapters;
using System.Web.UI.WebControls.Adapters;
namespace Samples.AspNet.CS
{
// Create a class that inherits from XhtmlTextWriter.
[AspNetHostingPermission(SecurityAction.Demand,
Level=AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level=AspNetHostingPermissionLevel.Minimal)]
public class CustomXhtmlTextWriter : XhtmlTextWriter
{
// Create two constructors, following
// the pattern for implementing a
// TextWriter constructor.
public CustomXhtmlTextWriter(TextWriter writer) :
this(writer, DefaultTabString)
{
}
public CustomXhtmlTextWriter(TextWriter writer, string tabString) :
base(writer, tabString)
{
}
// Override the OnAttributeRender method to
// allow this text writer to render only eight-point
// text size.
protected override bool OnAttributeRender(string name,
string value,
HtmlTextWriterAttribute key)
{
if (key == HtmlTextWriterAttribute.Size)
{
if (String.Compare(value, "8pt") == 0)
{
return true;
}
else
{
return false;
}
}
else
{
return base.OnAttributeRender(name, value, key);
}
}
// Override the OnStyleAttributeRender
// method to prevent this text writer
// from rendering purple text.
protected override bool OnStyleAttributeRender(string name,
string value,
HtmlTextWriterStyle key)
{
if (key == HtmlTextWriterStyle.Color)
{
if (String.Compare(value, "purple") == 0)
{
return false;
}
else
{
return true;
}
}
else
{
return base.OnStyleAttributeRender(name, value, key);
}
}
// Override the BeginRender method to write a
// message and call the WriteBreak method
// before a control is rendered.
override public void BeginRender()
{
this.Write("A control is about to render.");
this.WriteBreak();
}
// Override the EndRender method to
// write a string immediately after
// a control has rendered.
override public void EndRender()
{
this.Write("A control just rendered.");
}
}
}
Imports System.IO
Imports System.Web
Imports System.Security.Permissions
Imports System.Web.UI
Imports System.Web.UI.Adapters
Imports System.Web.UI.WebControls.Adapters
Namespace Samples.AspNet.VB
' Create a class that inherits from XhtmlTextWriter.
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class CustomXhtmlTextWriter
Inherits XhtmlTextWriter
' Create two constructors, following
' the pattern for implementing a
' TextWriter constructor.
Public Sub New(writer As TextWriter)
MyClass.New(writer, DefaultTabString)
End Sub
Public Sub New(writer As TextWriter, tabString As String)
MyBase.New(writer, tabString)
End Sub
' Override the OnAttributeRender method to
' allow this text writer to render only eight-point
' text size.
Overrides Protected Function OnAttributeRender(ByVal name As String, _
ByVal value As String, _
ByVal key As HtmlTextWriterAttribute _
) As Boolean
If key = HtmlTextWriterAttribute.Size Then
If String.Compare(value, "8pt") = 0 Then
Return True
Else
Return False
End If
Else
Return MyBase.OnAttributeRender(name, value, key)
End If
End Function
' Override the OnStyleAttributeRender
' method to prevent this text writer
' from rendering purple text.
Overrides Protected Function OnStyleAttributeRender(ByVal name As String, _
ByVal value As String, _
ByVal key As HtmlTextWriterStyle _
) As Boolean
If key = HtmlTextWriterStyle.Color Then
If String.Compare(value, "purple") = 0 Then
Return False
Else
Return True
End If
Else
Return MyBase.OnStyleAttributeRender(name, value, key)
End If
End Function
' Override the BeginRender method to write a
' message and call the WriteBreak method
' before a control is rendered.
Overrides Public Sub BeginRender()
Me.Write("A control is about to render.")
Me.WriteBreak()
End Sub
' Override the EndRender method to
' write a string immediately after
' a control has rendered.
Overrides Public Sub EndRender()
Me.Write("A control just rendered.")
End Sub
End Class
End Namespace
下面的代码示例演示如何创建名为 TestLabel
的自定义 Label 控件,以及一个名为 XhtmlTestLabelAdapter
的自定义适配器,该适配器将控件的内容呈现为 XHTML。
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.Adapters;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.Adapters;
namespace AspNet.Samples
{
// Create a simple class that inherits
// from the Label class.
public class TestLabel : Label
{
private String _textValue;
// Override the Text property.
public override string Text
{
get
{
return (string)ViewState["Text"];
}
set
{
ViewState["Text"] = value;
}
}
}
public class XhtmlTestLabelAdapter : WebControlAdapter
{
// Create a control property that accesses the
// methods and properties of the control.
protected TestLabel Control
{
get
{
return (TestLabel)base.Control;
}
}
protected override void Render(HtmlTextWriter writer)
{
// Create an instance of the XhtmlTextWriter class,
// named w, and cast the HtmlTextWriter passed
// in the writer parameter to w.
XhtmlTextWriter w = new XhtmlTextWriter(writer);
// Create a string variable, named value, to hold
// the control's Text property value.
String value = Control.Text;
// Create a Boolean variable, named attTest,
// to test whether the Style attribute is
// valid in the page that the control is
// rendered to.
Boolean attTest = w.IsValidFormAttribute("style");
// Check whether attTest is true or false.
// If true, a style is applied to the XHTML
// content. If false, no style is applied.
if (attTest)
w.EnterStyle(Control.ControlStyle);
// Write the Text property value of the control,
// a <br> element, and a string. Consider encoding the value using WriteEncodedText.
w.Write(value);
w.WriteBreak();
w.Write("This control conditionally rendered its styles for XHTML.");
// Check whether attTest is true or false.
// If true, the XHTML style is closed.
// If false, nothing is rendered.
if (attTest)
w.ExitStyle(Control.ControlStyle);
}
}
}
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.Adapters
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.Adapters
Namespace AspNet.Samples
' Create a simple class that inherits
' from the Label class.
Public Class TestLabel
Inherits Label
Private textValue As String
' Override the Text property.
Overrides Public Property Text As String
Get
Return CStr(ViewState("Text"))
End Get
Set
ViewState("Text") = Value
End Set
End Property
End Class
' Create a class to render the custom Label's
' content to XHTML devices.
Public Class XhtmlTestLabelAdapter
Inherits WebControlAdapter
' Create a Control property that accesses the
' methods and properties of the control.
Protected Shadows ReadOnly Property Control() As TestLabel
Get
Return CType(MyBase.Control, TestLabel)
End Get
End Property
' Override the Render method.
Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
' Create an instance of the XhtmlTextWriter class,
' named w, and cast the HtmlTextWriter passed
' in the writer parameter to w.
Dim w As XhtmlTextWriter = New XhtmlTextWriter(writer)
' Create a string variable, named value, to hold
' the control's Text property value.
Dim value As String = Control.Text
' Create a Boolean variable, named attTest,
' to test whether the Style attribute is
' valid in the page that the control is
' rendered to.
Dim attTest As Boolean = w.IsValidFormAttribute("style")
' Check whether attTest is true or false.
' If true, a style is applied to the XHTML
' content. If false, no style is applied.
If (attTest = True) Then
w.EnterStyle(Control.ControlStyle)
End If
' Write the Text property value of the control,
' a <br> element, and a string. Consider encoding the value using WriteEncodedText.
w.Write(value)
w.WriteBreak()
w.Write("This control conditionally rendered its styles for XHTML.")
' Check whether attTest is true or false.
' If true, the XHTML style is closed.
' If false, nothing is rendered.
If (attTest = True) Then
w.ExitStyle(Control.ControlStyle)
End If
End Sub
End Class
End Namespace
下面的代码示例演示如何在 ASP.NET 网页上使用自定义控件 TestLabel
。
<%@ Page Language="C#" %>
<%@ Import Namespace="AspNet.Samples" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
TestLabel tl = new TestLabel();
tl.ID = "TestLabel1";
PlaceHolder1.Controls.Add(tl);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>XHtmlTextWriter Example</title>
</head>
<body>
<form id="form1" runat="server" >
<div>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</div>
</form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ Import Namespace="AspNet.Samples" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim tl As TestLabel = New TestLabel()
tl.ID = "TestLabel1"
PlaceHolder1.Controls.Add(tl)
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>XHtmlTextWriter Example</title>
</head>
<body>
<form id="form1" runat="server" >
<div>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</div>
</form>
</body>
</html>
若要在前面的代码示例中使用自定义控件,请将以下 <controlAdapters>
元素添加到两个文件中之一。 可以将它作为 .NET Framework 配置目录的子文件夹添加到特定浏览器的子目录中的相应计算机范围文件。 或者,可以将该文件添加到 Web 应用程序根目录下的 App_Browsers 目录中的自定义浏览器文件。
<controlAdapters>
<adapter controlType="AspNet.Samples.TestLabel"
adapterType="AspNet.Samples.XhtmlTestLabelAdapter" />
</controlAdapters>
注解
XHTML 是基于 HTML 4.1 的符合 XML 的标记语言,可用于创建适合多种设备类型的网站。 它将 HTML 提供的易用性与 XML 提供的严格元素准则合并在一起,以生成具有各种格式和样式选项的标记语言,以及标记标记不明确性。 XhtmlTextWriter 类提供格式化功能,ASP.NET 服务器控件在向客户端呈现 XHTML 内容时使用。 可以使用 SetDocType 方法指定文本编写器呈现的 XHTML 类型。 支持的文档类型在 XhtmlMobileDocType 枚举中定义。
XhtmlTextWriter 类呈现元素的两组属性。 一组是通用属性的集合,如 CommonAttributes 属性中引用。 第二组是特定于元素的属性的集合,如 ElementSpecificAttributes 属性中引用。 有关呈现的元素和样式的详细信息,请参阅 万维网联合会(W3C)网站的 XHTML 模块化规范。
可以使用 XhtmlTextWriter 类和任何派生类的成员创建自定义文本编写器,以在自定义 XHTML 页面适配器或类适配器中使用。 还可以创建替代 XhtmlTextWriter 类的标准行为的派生类。
默认情况下,在使用支持 HTML 4.0 的浏览器时,ASP.NET 页面和控件呈现与 XHTML 1.1 标准兼容的标记。 有关详细信息,请参阅 Visual Studio 和 ASP.NET中的
除非你专门配置 ASP.NET 来不呈现 XHTML 标记,否则 HtmlTextWriter 将输出 XHTML。 有关详细信息,请参阅 如何:在 ASP.NET 网站中配置 XHTML 呈现。
构造函数
XhtmlTextWriter(TextWriter) |
初始化 XhtmlTextWriter 类的新实例,该实例使用 DefaultTabString 字段中指定的行缩进。 如果不想更改默认行缩进,请使用 XhtmlTextWriter(TextWriter) 构造函数。 |
XhtmlTextWriter(TextWriter, String) |
使用指定的行缩进初始化 XhtmlTextWriter 类的新实例。 |
字段
CoreNewLine |
存储用于此 |
DefaultTabString |
表示单个制表符。 (继承自 HtmlTextWriter) |
DoubleQuoteChar |
表示引号 (“) 字符。 (继承自 HtmlTextWriter) |
EndTagLeftChars |
表示标记元素的左尖括号和斜杠标记(</)。 (继承自 HtmlTextWriter) |
EqualsChar |
表示等号( |
EqualsDoubleQuoteString |
表示一个等号 (=) 和一个双引号 (“) 在字符串 (=) 中一起。 (继承自 HtmlTextWriter) |
SelfClosingChars |
表示标记标记的空格和自右斜杠标记 (/)。 (继承自 HtmlTextWriter) |
SelfClosingTagEnd |
表示自结束标记元素的右斜杠标记和右尖括号(/>)。 (继承自 HtmlTextWriter) |
SemicolonChar |
表示分号(;))。 (继承自 HtmlTextWriter) |
SingleQuoteChar |
表示撇号 (')。 (继承自 HtmlTextWriter) |
SlashChar |
表示斜杠标记(/)。 (继承自 HtmlTextWriter) |
SpaceChar |
表示空格 () 字符。 (继承自 HtmlTextWriter) |
StyleEqualsChar |
表示用于设置样式属性等于值的样式属性的样式等于 ( |
TagLeftChar |
表示标记标记的左尖括号(<)。 (继承自 HtmlTextWriter) |
TagRightChar |
表示标记标记的右尖括号(>)。 (继承自 HtmlTextWriter) |
属性
CommonAttributes |
获取一个 Hashtable 对象,该对象包含 XhtmlTextWriter 对象的标记标记的常见属性。 |
ElementSpecificAttributes |
获取包含特定于元素的属性的 Hashtable 对象。 |
Encoding |
获取 HtmlTextWriter 对象用于将内容写入页面的编码。 (继承自 HtmlTextWriter) |
FormatProvider |
获取一个对象,该对象控制格式设置。 (继承自 TextWriter) |
Indent |
获取或设置要缩进每行标记开头的制表位数。 (继承自 HtmlTextWriter) |
InnerWriter |
获取或设置写入标记元素的内部内容的文本编写器。 (继承自 HtmlTextWriter) |
NewLine |
获取或设置 HtmlTextWriter 对象使用的行终止符字符串。 (继承自 HtmlTextWriter) |
SuppressCommonAttributes |
获取禁止 CommonAttributes 属性的元素的 Hashtable 对象。 |
TagKey |
获取或设置指定标记元素的 HtmlTextWriterTag 值。 (继承自 HtmlTextWriter) |
TagName |
获取或设置正在呈现的标记元素的标记名称。 (继承自 HtmlTextWriter) |