Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/System.Web/System.Web.UI/CollectionBuilder.cs')
-rw-r--r--mcs/class/System.Web/System.Web.UI/CollectionBuilder.cs57
1 files changed, 57 insertions, 0 deletions
diff --git a/mcs/class/System.Web/System.Web.UI/CollectionBuilder.cs b/mcs/class/System.Web/System.Web.UI/CollectionBuilder.cs
new file mode 100644
index 00000000000..e494ce07c47
--- /dev/null
+++ b/mcs/class/System.Web/System.Web.UI/CollectionBuilder.cs
@@ -0,0 +1,57 @@
+//
+// System.Web.UI.CollectionBuilder.cs
+//
+// Authors:
+// Gonzalo Paniagua Javier (gonzalo@ximian.com)
+//
+// (c) 2003 Ximian, Inc. (http://www.ximian.com)
+//
+
+using System;
+using System.Collections;
+using System.Reflection;
+
+namespace System.Web.UI
+{
+ class CollectionBuilder : ControlBuilder
+ {
+ Type elementType;
+
+ internal CollectionBuilder ()
+ {
+ }
+
+ public override void AppendLiteralString (string s)
+ {
+ if (s != null && s.Trim () != "")
+ throw new HttpException ("Literal content not allowed for " + ControlType);
+ }
+
+ public override Type GetChildControlType (string tagName, IDictionary attribs)
+ {
+ Type t = Parser.GetTypeFromTag (tagName);
+ if (elementType != null && !(elementType.IsAssignableFrom (t)))
+ throw new HttpException ("Cannot add a " + t + " to " + elementType);
+
+ return t;
+ }
+
+ public override void Init (TemplateParser parser,
+ ControlBuilder parentBuilder,
+ Type type,
+ string tagName,
+ string id,
+ IDictionary attribs)
+ {
+ base.Init (parser, parentBuilder, type, tagName, id, attribs);
+
+ PropertyInfo prop = parentBuilder.ControlType.GetProperty (tagName, flagsNoCase);
+ SetControlType (prop.PropertyType);
+
+ prop = ControlType.GetProperty ("Item", flagsNoCase & ~BindingFlags.IgnoreCase);
+ if (prop != null)
+ elementType = prop.PropertyType;
+ }
+ }
+}
+