共用方式為


HtmlSelectBuilder 類別

定義

與剖析器 (Parser) 互動,以建置 HtmlSelect 控制項。

public ref class HtmlSelectBuilder : System::Web::UI::ControlBuilder
public class HtmlSelectBuilder : System.Web.UI.ControlBuilder
type HtmlSelectBuilder = class
    inherit ControlBuilder
Public Class HtmlSelectBuilder
Inherits ControlBuilder
繼承
HtmlSelectBuilder

範例

下列程式碼範例示範如何建立自訂 HtmlSelectBuilder 控制項,以定義自訂 HtmlSelect 控制項的 <option> 兩種子項目類型,然後以不同的方式處理每個類型。

<%@ Page Language="C#"%>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls" Assembly="Samples.AspNet.CS" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>HtmlSelectBuilder Example</title>
</head>
  <body>
    <form id="Form1" runat="server">
      <h3>HtmlSelectBuilder Example</h3>

      <aspSample:CustomHtmlSelect
       id="customhtmlselect1"
       runat="server">
      <aspSample:MyOption1 optionid="option1" value="1" text="item 1"/>
      <aspSample:MyOption1 optionid="option2" value="2" text="item 2"/>
      <aspSample:MyOption2 optionid="option3" value="3" text="item 3"/>
      <aspSample:MyOption2 optionid="option4" value="4" text="item 4"/>
      </aspSample:CustomHtmlSelect>

    </form>

  </body>

</html>
<%@ Page Language="VB"%>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB.Controls" Assembly="Samples.AspNet.VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>HtmlSelectBuilder Example</title>
</head>
  <body>
    <form id="Form1" runat="server">
      <h3>HtmlSelectBuilder Example</h3>

      <aspSample:CustomHtmlSelect
       id="customhtmlselect1"
       runat="server">
      <aspSample:MyOption1 optionid="option1" value="1" text="item 1"/>
      <aspSample:MyOption1 optionid="option2" value="2" text="item 2"/>
      <aspSample:MyOption2 optionid="option3" value="3" text="item 3"/>
      <aspSample:MyOption2 optionid="option4" value="4" text="item 4"/>
      </aspSample:CustomHtmlSelect>

    </form>

  </body>

</html>
using System;
using System.Security.Permissions;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace Samples.AspNet.CS.Controls
{
        // Define a type of child control for the custom HtmlSelect control.
    public class MyOption1
    {
        string _id;
        string _value;
        string _text;

        public string optionid
        {
            get
            { return _id; }
            set
            { _id = value; }
        }

        public string value
        {
            get
            { return _value; }
            set
            { _value = value; }
        }

        public string text
        {
            get
            { return _text; }
            set
            { _text = value; }
        }
    }

       // Define a type of child control for the custom HtmlSelect control.
    public class MyOption2
    {
        string _id;
        string _value;
        string _text;

        public string optionid
        {
            get
            { return _id; }
            set
            { _id = value; }
        }

        public string value
        {
            get
            { return _value; }
            set
            { _value = value; }
        }

        public string text
        {
            get
            { return _text; }
            set
            { _text = value; }
        }
    }

    // Define a custom HtmlSelectBuilder control.
    public class MyHtmlSelectBuilder : HtmlSelectBuilder
    {
        [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
        public override Type GetChildControlType(string tagName, IDictionary attribs)
        {
            // Distinguish between two possible types of child controls.
            if (tagName.ToLower().EndsWith("myoption1"))
            {
                return typeof(MyOption1);
            }
            else if (tagName.ToLower().EndsWith("myoption2"))
            {
                return typeof(MyOption2);
            }
            return null;
        }
    }

    [ControlBuilderAttribute(typeof(MyHtmlSelectBuilder))]
    public class CustomHtmlSelect : HtmlSelect
    {
        
        // Override AddParsedSubObject to treat the two types
        // of child controls differently.
        protected override void AddParsedSubObject(object obj)
        {
            string _outputtext;
            if (obj is MyOption1)
            {
                _outputtext = "option group 1: " + ((MyOption1)obj).text;
                ListItem li = new ListItem(_outputtext, ((MyOption1)obj).value);
                base.Items.Add(li);
            }
            if (obj is MyOption2)
            {
                _outputtext = "option group 2: " + ((MyOption2)obj).text;
                ListItem li = new ListItem(_outputtext, ((MyOption2)obj).value);
                base.Items.Add(li);
            }
        }
    }
}
Imports System.Security.Permissions
Imports System.Collections
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls

Namespace Samples.AspNet.VB.Controls
    ' Define a type of child control for the custom HtmlSelect control.
    Public Class MyOption1
        Private _id As String
        Private _value As String
        Private _text As String


        Public Property optionid() As String
            Get
                Return _id
            End Get
            Set(ByVal value As String)
                _id = value
            End Set
        End Property

        Public Property value() As String
            Get
                Return _value
            End Get
            Set(ByVal value As String)
                _value = value
            End Set
        End Property

        Public Property [text]() As String
            Get
                Return _text
            End Get
            Set(ByVal value As String)
                _text = value
            End Set
        End Property
    End Class 

    ' Define a type of child control for the custom HtmlSelect control.
    Public Class MyOption2
        Private _id As String
        Private _value As String
        Private _text As String


        Public Property optionid() As String
            Get
                Return _id
            End Get
            Set(ByVal value As String)
                _id = value
            End Set
        End Property

        Public Property value() As String
            Get
                Return _value
            End Get
            Set(ByVal value As String)
                _value = value
            End Set
        End Property

        Public Property [text]() As String
            Get
                Return _text
            End Get
            Set(ByVal value As String)
                _text = value
            End Set
        End Property
    End Class 

    ' Define a custom HtmlSelectBuilder control.
    Public Class MyHtmlSelectBuilder
        Inherits HtmlSelectBuilder

        <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal)> _
        Public Overrides Function GetChildControlType(ByVal tagName As String, ByVal attribs As IDictionary) As Type

            ' Distinguish between two possible types of child controls.
            If tagName.ToLower().EndsWith("myoption1") Then
                Return GetType(MyOption1)
            ElseIf tagName.ToLower().EndsWith("myoption2") Then
                Return GetType(MyOption2)
            End If
            Return Nothing

        End Function 
    End Class 

    <ControlBuilderAttribute(GetType(MyHtmlSelectBuilder))> _
    Public Class CustomHtmlSelect
        Inherits HtmlSelect

        ' Override AddParsedSubObject to treat the two types
        ' of child controls differently.
        Protected Overrides Sub AddParsedSubObject(ByVal obj As Object)
            Dim _outputtext As String
            If TypeOf obj Is MyOption1 Then
                _outputtext = "option group 1: " + CType(obj, MyOption1).text
                Dim li As New ListItem(_outputtext, CType(obj, MyOption1).value)
                MyBase.Items.Add(li)
            End If
            If TypeOf obj Is MyOption2 Then
                _outputtext = "option group 2: " + CType(obj, MyOption2).text
                Dim li As New ListItem(_outputtext, CType(obj, MyOption2).value)
                MyBase.Items.Add(li)
            End If

        End Sub 
    End Class 
End Namespace

備註

控制項 HtmlSelectBuilder 會與頁面剖析器互動,以建置 HtmlSelect 控制項。 HtmlSelectBuilder使用 控制項來自訂控制項的 HtmlSelect 剖析。

屬性 AllowWhitespaceLiterals 設定為 false ,因此一律會忽略空白字元。 GetChildControlType使用 方法來判斷控制項的子控制項類型 HtmlSelect

給繼承者的注意事項

若要建立控制項的 HtmlSelect 自訂控制項產生器,您需要繼承自這個類別。

建構函式

HtmlSelectBuilder()

初始化 HtmlSelectBuilder 類別的新執行個體。

屬性

BindingContainerBuilder

取得控制項產生器,對應於這個產生器所建立之控制項的繫結容器。

(繼承來源 ControlBuilder)
BindingContainerType

取得這個產生器所建立之控制項的繫結容器型別。

(繼承來源 ControlBuilder)
ComplexPropertyEntries

取得複雜屬性項目的集合。

(繼承來源 ControlBuilder)
ControlType

取得所要建立的控制項的 Type

(繼承來源 ControlBuilder)
CurrentFilterResolutionService

取得 IFilterResolutionService 物件,用於設計工具中剖析和保存控制項時,管理裝置篩選條件相關的服務。

(繼承來源 ControlBuilder)
DeclareType

取得產生程式碼時用來宣告控制項的型別。

(繼承來源 ControlBuilder)
FChildrenAsProperties

取得值,判斷控制項是否有 ParseChildrenAttribute 設為 trueChildrenAsProperties

(繼承來源 ControlBuilder)
FIsNonParserAccessor

取得值,判斷控制項是否實作 IParserAccessor 介面。

(繼承來源 ControlBuilder)
HasAspCode

取得值,指出控制項是否包含任何程式碼區塊。

(繼承來源 ControlBuilder)
ID

取得或設定要建置的控制項的識別項屬性。

(繼承來源 ControlBuilder)
InDesigner

傳回值,指出 ControlBuilder 是否在設計工具中執行。

(繼承來源 ControlBuilder)
InPageTheme

取得布林值,指出這個 ControlBuilder 物件是否用來產生頁面主題。

(繼承來源 ControlBuilder)
ItemType

取得在繫結容器上設定的類型。

(繼承來源 ControlBuilder)
Localize

取得布林值,指出這個 ControlBuilder 物件所建立的控制項是否當地語系化。

(繼承來源 ControlBuilder)
NamingContainerType

取得這個產生器所建立之控制項的命名容器型別。

(繼承來源 ControlBuilder)
PageVirtualPath

取得欲以此 ControlBuilder 執行個體組建之頁面的虛擬路徑。

(繼承來源 ControlBuilder)
Parser

取得負責剖析控制項的 TemplateParser

(繼承來源 ControlBuilder)
ServiceProvider

取得這個 ControlBuilder 物件的服務物件。

(繼承來源 ControlBuilder)
SubBuilders

取得這個 ControlBuilder 物件之子 ControlBuilder 物件的清單。

(繼承來源 ControlBuilder)
TagName

取得要建置的控制項的標記名稱。

(繼承來源 ControlBuilder)
TemplatePropertyEntries

取得樣板屬性項目的集合。

(繼承來源 ControlBuilder)
ThemeResolutionService

取得 IThemeResolutionService 物件,這個物件在設計階段用來管理控制項主題和面板。

(繼承來源 ControlBuilder)

方法

AllowWhitespaceLiterals()

判斷 HtmlSelect 控制項中的泛空白字元常值 (Literal) 是必須處理或是忽略。

AppendLiteralString(String)

將指定的常值內容加入控制項。 此方法由 ASP.NET 網頁架構呼叫。

(繼承來源 ControlBuilder)
AppendSubBuilder(ControlBuilder)

針對屬於容器控制項的任何子控制項,將產生器加入 ControlBuilder 物件中。

(繼承來源 ControlBuilder)
BuildObject()

建置這個 ControlBuilder 物件所參考之控制項的設計階段執行個體。

(繼承來源 ControlBuilder)
CloseControl()

由剖析器呼叫,通知產生器,控制項開頭和結尾標記的剖析已經完成。

(繼承來源 ControlBuilder)
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetChildControlType(String, IDictionary)

取得 Type 控制項子控制項的 HtmlSelect

GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetObjectPersistData()

建立這個 ObjectPersistData 物件的 ControlBuilder 物件。

(繼承來源 ControlBuilder)
GetResourceKey()

擷取這個 ControlBuilder 物件的資源索引鍵。

(繼承來源 ControlBuilder)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
HasBody()

判斷控制項是否有開頭和結尾標記。 此方法由 ASP.NET 網頁架構呼叫。

(繼承來源 ControlBuilder)
HtmlDecodeLiterals()

判斷 HTML 控制項的常值字串是否必須為解碼的 HTML。 此方法由 ASP.NET 網頁架構呼叫。

(繼承來源 ControlBuilder)
Init(TemplateParser, ControlBuilder, Type, String, String, IDictionary)

初始化 ControlBuilder,以便當它執行個體化之後,可供使用。 此方法由 ASP.NET 網頁架構呼叫。

(繼承來源 ControlBuilder)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
NeedsTagInnerText()

判斷控制項產生器是否需要取得它的內部文字。 如果是,必須呼叫 SetTagInnerText(String) 方法。 此方法由 ASP.NET 網頁架構呼叫。

(繼承來源 ControlBuilder)
OnAppendToParentBuilder(ControlBuilder)

告知 ControlBuilder 已經加入到父控制項產生器中。

(繼承來源 ControlBuilder)
ProcessGeneratedCode(CodeCompileUnit, CodeTypeDeclaration, CodeTypeDeclaration, CodeMemberMethod, CodeMemberMethod)

讓自訂控制項產生器存取產生的程式碼文件物件模型 (CodeDom),並在剖析及建置控制項的過程中插入及修改程式碼。

(繼承來源 ControlBuilder)
SetResourceKey(String)

設定這個 ControlBuilder 物件的資源索引鍵。

(繼承來源 ControlBuilder)
SetServiceProvider(IServiceProvider)

設定這個 ControlBuilder 物件的服務物件。

(繼承來源 ControlBuilder)
SetTagInnerText(String)

提供控制項標記內部文字給 ControlBuilder

(繼承來源 ControlBuilder)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

適用於

另請參閱