Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

ControlBuilderAttribute Class

Specifies a ControlBuilder class for building a custom control within the ASP.NET parser. This class cannot be inherited.

Namespace: System.Web.UI
Assembly: System.Web (in system.web.dll)
[AttributeUsageAttribute(AttributeTargets.Class)] 
public sealed class ControlBuilderAttribute : Attribute
/** @attribute AttributeUsageAttribute(AttributeTargets.Class) */ 
public final class ControlBuilderAttribute extends Attribute
AttributeUsageAttribute(AttributeTargets.Class) 
public final class ControlBuilderAttribute extends Attribute
Not applicable.

This attribute specifies the builder Type to be used to create a custom control as shown in the following code:

[ControlBuilderAttribute(typeof(ControlBuilderType))]

The following code example creates a customized selection list that is used to display a message based on the SelectedIndex and the Message values defined at run time. The following command line is used to build the executable.

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>" );
         }
       }
    }    
}


package CustomControls;

/* File name: controlBuilderAttribute.jsl. */
import System.*;
import System.Web.*;
import System.Web.UI.*;
import System.Web.UI.WebControls.*;
import System.Collections.*;

public class MyJSL_Item extends Control
{
    /* Class name: MyJSL_Item. 
       Defines the child control class.
     */
    private String _message;
    /** @property 
     */
    public String get_Message()
    {
        return _message;
    } //get_Message

    /** @property 
     */
    public void set_Message(String value)
    {
        _message = value;
    } //set_Message
} //MyJSL_Item

public class CustomParseControlBuilder extends 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.
     */
    public Type GetChildControlType(String tagName, IDictionary attributes)
    {
        if (String.Compare(tagName, "customitem", true) == 0) {
            return MyJSL_Item.class.ToType();
        }
        return null;
    } //GetChildControlType
} //CustomParseControlBuilder

/** @attribute ControlBuilderAttribute(CustomParseControlBuilder.class)
 */
public class MyJSL_CustomParse extends Control
{
    /* Class name: MyJSL_CustomParse.
       Performs custom parsing of a MyJSL_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;

    /** @property 
     */
    public int get_SelectedIndex()
    {
        return _selectedIndex;
    } //get_SelectedIndex

    /** @property 
     */
    public void set_SelectedIndex(int value)
    {
        _selectedIndex = value;
    } //set_SelectedIndex

    protected 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 instanceof MyJSL_Item) {
            _items.Add(obj);
        }
    } //AddParsedSubObject

    protected 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 (get_SelectedIndex() < _items.get_Count()) {
            output.Write("<span style='background-color:aqua; color:red;"
                + " font:8pt tahoma, verdana;'><b>"
                + ((MyJSL_Item)_items.get_Item(get_SelectedIndex())).get_Message()
                + "</b></span>");
        }
    } //Render
} //MyJSL_CustomParse

The following example uses the custom control defined above. In particular, it assigns the SelectedIndex and Message values at run time to determine the message to be rendered. Notice that the values shown in the Register directive reflect the previous command line.

<%@ 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>
System.Object
   System.Attribute
    System.Web.UI.ControlBuilderAttribute
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 98, Windows Server 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0, 1.1, 1.0

Community Additions

ADD
Show:
© 2014 Microsoft. All rights reserved.