public override void AppendSubBuilder(ControlBuilder subBuilder)
 {
     if (_doLiteralText)
     {
         // The first one is used if ASP.NET is compiled with FAST_DATABINDING off. The second
         // is used if it is compiled with FAST_DATABINDING on. Note: We can't do a type
         // comparison because CodeBlockBuilder is internal.
         // if (typeof(DataBoundLiteralControl).IsAssignableFrom(subBuilder.ControlType))
         if (subBuilder.GetType().FullName == "System.Web.UI.CodeBlockBuilder")
         {
             TextParser.AddDataBinding(subBuilder);
         }
         else
         {
             base.AppendSubBuilder(subBuilder);
             if (subBuilder.ControlType != typeof(LiteralText))
             {
                 if (_textParser != null)
                 {
                     _textParser.ResetBreaking();
                 }
                 else
                 {
                     _controlsInserted = true;
                 }
             }
         }
     }
     else
     {
         base.AppendSubBuilder(subBuilder);
     }
 }
Пример #2
0
    protected ControlBuilder GetParentBuilder(ControlBuilder controlBuilder)
    {
        if (controlBuilder == null)
        {
            throw new ArgumentNullException("controlBuilder");
        }

        return((ControlBuilder)controlBuilder.GetType().GetProperty("ParentBuilder", InstPubNonpub).GetValue(controlBuilder, null));
    }
Пример #3
0
    protected ArrayList GetSubBuilders(ControlBuilder controlBuilder)
    {
        if (controlBuilder == null)
        {
            throw new ArgumentNullException("controlBuilder");
        }

        return((ArrayList)controlBuilder.GetType().GetProperty("SubBuilders", InstPubNonpub).GetValue(controlBuilder, null));
    }
Пример #4
0
        public static ICollection GetSimplePropertyEntries(this ControlBuilder @this)
        {
            Require.NotNull(@this, nameof(@this));

            return (ICollection)@this
                .GetType()
                .GetProperty("SimplePropertyEntries", BINDING_ATTR)
                .GetValue(@this, null /* index */);
        }
Пример #5
0
        public static ControlBuilder GetParentBuilder(this ControlBuilder @this)
        {
            Require.NotNull(@this, nameof(@this));

            return (ControlBuilder)@this
                .GetType()
                .GetProperty("ParentBuilder", BINDING_ATTR)
                .GetValue(@this, null /* index */);
        }
Пример #6
0
        public static ControlBuilder GetDefaultPropertyBuilder(this ControlBuilder @this)
        {
            Require.NotNull(@this, nameof(@this));

            PropertyInfo pi = null;
            Type type = @this.GetType();

            while (type != null
                   && (pi = type.GetProperty("DefaultPropertyBuilder", BINDING_ATTR)) == null)
            {
                type = type.BaseType;
            }

            return (ControlBuilder)pi.GetValue(@this, index: null);
        }
Пример #7
0
        /// <include file='doc\Form.uex' path='docs/doc[@for="FormControlBuilder.AppendSubBuilder"]/*' />
        public override void AppendSubBuilder(ControlBuilder subBuilder)
        {
            Type controlType = subBuilder.ControlType;

            if (!(
                    (subBuilder.GetType().FullName == "System.Web.UI.CodeBlockBuilder") ||
                    (typeof(MobileControl).IsAssignableFrom(controlType)) ||
                    (typeof(UserControl).IsAssignableFrom(controlType)) ||
                    (typeof(DeviceSpecific).IsAssignableFrom(controlType))
                    ))
            {
                throw(new Exception(SR.GetString(SR.Form_InvalidSubControlType, subBuilder.TagName)));
            }
            base.AppendSubBuilder(subBuilder);
        }
Пример #8
0
    protected ControlBuilder GetDefaultPropertyBuilder(ControlBuilder controlBuilder)
    {
        if (controlBuilder == null)
        {
            throw new ArgumentNullException("controlBuilder");
        }

        PropertyInfo pi   = null;
        Type         type = controlBuilder.GetType();

        while (type != null && (InlineAssignHelper(ref pi, type.GetProperty("DefaultPropertyBuilder", InstPubNonpub))) == null)
        {
            type = type.BaseType;
        }

        return((ControlBuilder)pi.GetValue(controlBuilder, null));
    }
Пример #9
0
    protected ArrayList GetComplexPropertyEntries(ControlBuilder controlBuilder)
    {
        if (controlBuilder == null)
        {
            throw new ArgumentNullException("controlBuilder");
        }

        ICollection cpes = (ICollection)controlBuilder.GetType().GetProperty("ComplexPropertyEntries", InstPubNonpub).GetValue(controlBuilder, null);

        if (cpes == null || cpes.Count == 0)
        {
            return(new ArrayList(0));
        }
        else
        {
            return((ArrayList)cpes);
        }
    }
Пример #10
0
        public override void ParseComplete(ControlBuilder rootBuilder)
        {
            base.ParseComplete(rootBuilder);
            Type type = rootBuilder.GetType();

            ViewPageControlBuilderEx viewPageControlBuilder = rootBuilder as ViewPageControlBuilderEx;

            if (viewPageControlBuilder != null)
            {
                viewPageControlBuilder.PageBaseType = this._viewBaseType;
            }

            ViewUserControlControlBuilderEx viewUserControlControlBuilder = rootBuilder as ViewUserControlControlBuilderEx;

            if (viewUserControlControlBuilder != null)
            {
                viewUserControlControlBuilder.UserControlBaseType = this._viewBaseType;
            }
        }
Пример #11
0
 private static void GetChildControlOfControlBuilder(ControlBuilder builder, string tagName)
 {
     try
     {
         // Get the child control type of passed
         // builder using passed tag name.
         var type = builder.GetChildControlType(
             tagName,
             new Dictionary <string, string>()
             );
         Logging.Log($"Child Control Type of {builder.GetType().Name} (ID: {builder.ID}) is {type}");
     }
     catch (System.Web.HttpParseException exception)
     {
         // Output expected HttpParseExceptions.
         Logging.Log(exception);
     }
     catch (Exception exception)
     {
         // Output unexpected Exceptions.
         Logging.Log(exception, false);
     }
 }
Пример #12
0
        void CreateControlSkinMethod(ControlBuilder builder)
        {
            if (builder.ControlType == null)
            {
                return;
            }

            EnsureID(builder);

            CodeMemberMethod method = new CodeMemberMethod();

            method.Name = "__BuildControl_" + builder.ID;
            method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(Control), "ctrl"));

            mainClass.Members.Add(method);

            builder.Method           = method;
            builder.MethodStatements = method.Statements;

            method.ReturnType = new CodeTypeReference(typeof(Control));

            // _ctrl = ($controlType)(ctrl);
            //
            CodeCastExpression castExpr = new CodeCastExpression(builder.ControlType, new CodeVariableReferenceExpression("ctrl"));

            method.Statements.Add(new CodeVariableDeclarationStatement(builder.ControlType, "__ctrl"));
            CodeAssignStatement assign = new CodeAssignStatement();

            assign.Left  = ctrlVar;
            assign.Right = castExpr;
            method.Statements.Add(assign);

            CreateAssignStatementsFromAttributes(builder);

            if (builder.Children != null)
            {
                foreach (object o in builder.Children)
                {
                    if (!(o is ControlBuilder))
                    {
                        continue;
                    }

                    ControlBuilder b = (ControlBuilder)o;
                    if (b.ControlType == null)
                    {
                        continue;
                    }

                    if (b is CollectionBuilder)
                    {
                        PropertyInfo itemsProp = null;

                        try {
                            itemsProp = b.GetType().GetProperty("Items");
                        } catch (Exception) {}

                        if (itemsProp != null)
                        {
                            /* emit a prop.Clear call before populating the collection */;
                            CodePropertyReferenceExpression prop = new CodePropertyReferenceExpression(ctrlVar,
                                                                                                       b.TagName);
                            CodePropertyReferenceExpression items = new CodePropertyReferenceExpression(prop,
                                                                                                        "Items");
                            method.Statements.Add(new CodeMethodInvokeExpression(items, "Clear"));
                        }
                    }

                    CreateControlTree(b, false, builder.ChildrenAsProperties);
                    AddChildCall(builder, b);
                }
            }

            builder.Method.Statements.Add(new CodeMethodReturnStatement(ctrlVar));
        }