ControlBuilderAttribute 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指定用于在 ASP.NET 分析器内生成自定义控件的 ControlBuilder 类。 此类不能被继承。
public ref class ControlBuilderAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class)]
public sealed class ControlBuilderAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class)>]
type ControlBuilderAttribute = class
inherit Attribute
Public NotInheritable Class ControlBuilderAttribute
Inherits Attribute
- 继承
- 属性
示例
下面的代码示例创建一个自定义选择列表,该列表用于显示基于 SelectedIndex
在运行时定义的 和 Message
值的消息。 以下命令行用于生成可执行文件。
vbc /r:System.dll /r:System.Web.dll /r:System.Drawing.dll /t:library /out:myWebAppPath/Bin/vb_MyControlBuilderAtt.dll ControlBuilderAtt.vb
csc /t:library /out:myWebAppPath/Bin/cs_MyControlBuilderAtt.dll ControlBuilderAtt.cs
/* File name: controlBuilderAttribute.cs. */
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
namespace CustomControls
{
public class MyCS_Item : Control
/* Class name: MyCS_Item.
* Defines the child control class.
*/
{
private String _message;
public String Message
{
get
{
return _message;
}
set
{
_message = value;
}
}
}
public class CustomParseControlBuilder : ControlBuilder
/* Class name: CustomParserControlBuilder.
* Defines the functions and data to be used in building custom controls.
* This class is referenced using the ControlBuilderAttribute class. See class below.
*/
{
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
public override Type GetChildControlType(String tagName, IDictionary attributes)
{
if (String.Compare(tagName, "customitem", true) == 0)
{
return typeof(MyCS_Item);
}
return null;
}
}
[
ControlBuilderAttribute(typeof(CustomParseControlBuilder))
]
public class MyCS_CustomParse : Control
/* Class name: MyCS_CustomParse.
* Performs custom parsing of a MyCS_CustomParse control type
* child control.
* If the child control is of the allowed type, it is added to an
* array list. This list is accessed, using the container control attribute
* SelectedIndex, to obtain the related child control Message attribute to be displayed.
*/
{
private ArrayList _items = new ArrayList();
private int _selectedIndex = 0;
public int SelectedIndex
{
get
{
return _selectedIndex;
}
set
{
_selectedIndex = value;
}
}
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
protected override void AddParsedSubObject(Object obj)
/* Function name: AddParsedSubObject.
* Updates the array list with the allowed child objects.
* This function is called during the parsing of the child controls and
* after the GetChildControlType function defined in the associated control
* builder class.
*/
{
if (obj is MyCS_Item)
{
_items.Add(obj);
}
}
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
protected override void Render(HtmlTextWriter output)
/* Function name: Render.
* Establishes the rules to render the built control. In this case, a message is
* rendered that is a function of the parent control SelectedIndex attribute and
* the related child Message attribute.
*/
{
if (SelectedIndex < _items.Count)
{
output.Write("<span style='background-color:aqua; color:red; font:8pt tahoma, verdana;'><b>" +
((MyCS_Item) _items[SelectedIndex]).Message + "</b></span>" );
}
}
}
}
'File name: controlBuilderAttribute.vb.
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Collections
Namespace CustomControls
Public Class MyVB_Item: Inherits Control
Private _message As String
Public Property Message() As String
Get
Return _message
End Get
Set
_message = value
End Set
End Property
End Class
Public Class VB_CustomParseControlBuilder: Inherits ControlBuilder
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Public Overrides Function GetChildControlType(TagName As String, attributes As IDictionary) As Type
If (TagName = "customitem") Then
Return GetType(CustomControls.MyVB_Item)
End If
Return Nothing
End Function 'GetChildControlType
End Class
<ControlBuilderAttribute(GetType(VB_CustomParseControlBuilder))> Public Class MyVB_CustomParse: Inherits Control
Private _items As New ArrayList
Private _selectedIndex As Integer = 0
Public Property SelectedIndex() As Integer
Get
Return _selectedIndex
End Get
Set
_selectedIndex = value
End Set
End Property
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Protected Overrides Sub AddParsedSubObject(obj As Object)
If TypeOf obj Is MyVB_Item Then
_items.Add(obj)
End If
End Sub
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Protected Overrides Sub Render(output As HtmlTextWriter)
output.Write(("<span style='background-color:aqua; color:red; font:8pt tahoma, verdana;'><b>" + CType(_items(SelectedIndex), MyVB_Item).Message + "</b></span>"))
End Sub
End Class
End Namespace 'CustomControls
以下示例使用上面定义的自定义控件。 具体而言,它会在运行时分配 SelectedIndex
和 Message
值,以确定要呈现的消息。 请注意, 指令中显示的 Register
值反映了上一个命令行。
<%@ Register TagPrefix="custom" Assembly="myControlBuilderAtt" Namespace="CustomControls" %>
<h4>Using ControlBuilderAttribute Class<h4>
<form runat="server">
<custom:MyVB_CustomParse SelectedIndex="3" runat=server>
<customitem Message="Visual Basic version. Item One selected"/>
<customitem Message="Visual Basic version. Item Two selected"/>
<customitem Message="Visual Basic version. Item Three selected"/>
<customitem Message="Visual Basic version. Item Four selected"/>
</custom:MyVB_CustomParse>
</form>
<%@ Register TagPrefix="custom" Assembly="myControlBuilderAtt" Namespace="CustomControls" %>
<h4>Using ControlBuilderAttribute Class<h4>
<form runat="server">
<custom:MyCS_CustomParse SelectedIndex="2" runat=server>
<customitem Message="C# version. Item One selected"/>
<customitem Message="C# version. Item Two selected"/>
<customitem Message="C# version. Item Three selected"/>
<customitem Message="C# version. Item Four selected"/>
</custom:MyCS_CustomParse>
</form>
注解
此属性指定要用于创建自定义控件的生成器 Type ,如以下代码所示:
[ControlBuilderAttribute(typeof(ControlBuilderType))]
构造函数
ControlBuilderAttribute(Type) |
为自定义控件指定控件生成器。 |
字段
Default |
指定新 ControlBuilderAttribute 对象。 默认情况下,新对象设置为空。 此字段为只读。 |
属性
BuilderType |
获取与此特性关联的控件的 Type。 此属性为只读。 |
TypeId |
在派生类中实现时,获取此 Attribute 的唯一标识符。 (继承自 Attribute) |
方法
Equals(Object) |
获取一个值,该值指示当前的 ControlBuilderAttribute 是否与指定对象相同。 |
GetHashCode() |
返回 ControlBuilderAttribute 对象的哈希代码。 |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
IsDefaultAttribute() |
确定当前控件生成器是否为默认生成器。 |
Match(Object) |
当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。 (继承自 Attribute) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |
显式接口实现
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
将一组名称映射为对应的一组调度标识符。 (继承自 Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
检索对象的类型信息,然后可以使用该信息获取接口的类型信息。 (继承自 Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
检索对象提供的类型信息接口的数量(0 或 1)。 (继承自 Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
提供对某一对象公开的属性和方法的访问。 (继承自 Attribute) |