Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / UI / CollectionBuilder.cs / 1305376 / CollectionBuilder.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Classes related to complex property support. * * Copyright (c) 1999 Microsoft Corporation */ namespace System.Web.UI { using System; using System.Collections; using System.Reflection; using System.Web.Util; [AttributeUsage(AttributeTargets.Property)] internal sealed class IgnoreUnknownContentAttribute : Attribute { internal IgnoreUnknownContentAttribute() {} } ////// internal sealed class CollectionBuilder : ControlBuilder { private Type _itemType; private bool _ignoreUnknownContent; internal CollectionBuilder(bool ignoreUnknownContent) { _ignoreUnknownContent = ignoreUnknownContent; } ///[To be supplied.] ////// public override void Init(TemplateParser parser, ControlBuilder parentBuilder, Type type, string tagName, string ID, IDictionary attribs) { base.Init(parser, parentBuilder, type /*type*/, tagName, ID, attribs); // PropertyInfo propInfo = TargetFrameworkUtil.GetProperty(parentBuilder.ControlType, tagName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.IgnoreCase); SetControlType(propInfo.PropertyType); Debug.Assert(ControlType != null, "ControlType != null"); BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance; // Look for an "item" property on the collection that takes in an integer index // (similar to IList::Item) propInfo = TargetFrameworkUtil.GetProperty(ControlType, "Item", bindingFlags, null, null, new Type[] { typeof(int) }, null); if (propInfo == null) { // fall-back on finding a non-specific Item property // a type with overloaded indexed properties will result in an exception however propInfo = TargetFrameworkUtil.GetProperty(ControlType, "Item", bindingFlags); } // If we got one, use it to determine the type of the items if (propInfo != null) _itemType = propInfo.PropertyType; } // This code is only executed when used from the desiger ///[To be supplied.] ////// public override object BuildObject() { return this; } ///[To be supplied.] ////// public override Type GetChildControlType(string tagName, IDictionary attribs) { Type childType = Parser.MapStringToType(tagName, attribs); // If possible, check if the item is of the required type if (_itemType != null) { if (!_itemType.IsAssignableFrom(childType)) { if (_ignoreUnknownContent) return null; string controlTypeName = String.Empty; if (ControlType != null) { controlTypeName = ControlType.FullName; } else { controlTypeName = TagName; } throw new HttpException(SR.GetString( SR.Invalid_collection_item_type, new String[] { controlTypeName, _itemType.FullName, tagName, childType.FullName})); } } return childType; } ///[To be supplied.] ////// public override void AppendLiteralString(string s) { if (_ignoreUnknownContent) return; // Don't allow non-whitespace literal content if (!Util.IsWhiteSpaceString(s)) { throw new HttpException(SR.GetString( SR.Literal_content_not_allowed, ControlType.FullName, s.Trim())); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //[To be supplied.] ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Classes related to complex property support. * * Copyright (c) 1999 Microsoft Corporation */ namespace System.Web.UI { using System; using System.Collections; using System.Reflection; using System.Web.Util; [AttributeUsage(AttributeTargets.Property)] internal sealed class IgnoreUnknownContentAttribute : Attribute { internal IgnoreUnknownContentAttribute() {} } ////// internal sealed class CollectionBuilder : ControlBuilder { private Type _itemType; private bool _ignoreUnknownContent; internal CollectionBuilder(bool ignoreUnknownContent) { _ignoreUnknownContent = ignoreUnknownContent; } ///[To be supplied.] ////// public override void Init(TemplateParser parser, ControlBuilder parentBuilder, Type type, string tagName, string ID, IDictionary attribs) { base.Init(parser, parentBuilder, type /*type*/, tagName, ID, attribs); // PropertyInfo propInfo = TargetFrameworkUtil.GetProperty(parentBuilder.ControlType, tagName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.IgnoreCase); SetControlType(propInfo.PropertyType); Debug.Assert(ControlType != null, "ControlType != null"); BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance; // Look for an "item" property on the collection that takes in an integer index // (similar to IList::Item) propInfo = TargetFrameworkUtil.GetProperty(ControlType, "Item", bindingFlags, null, null, new Type[] { typeof(int) }, null); if (propInfo == null) { // fall-back on finding a non-specific Item property // a type with overloaded indexed properties will result in an exception however propInfo = TargetFrameworkUtil.GetProperty(ControlType, "Item", bindingFlags); } // If we got one, use it to determine the type of the items if (propInfo != null) _itemType = propInfo.PropertyType; } // This code is only executed when used from the desiger ///[To be supplied.] ////// public override object BuildObject() { return this; } ///[To be supplied.] ////// public override Type GetChildControlType(string tagName, IDictionary attribs) { Type childType = Parser.MapStringToType(tagName, attribs); // If possible, check if the item is of the required type if (_itemType != null) { if (!_itemType.IsAssignableFrom(childType)) { if (_ignoreUnknownContent) return null; string controlTypeName = String.Empty; if (ControlType != null) { controlTypeName = ControlType.FullName; } else { controlTypeName = TagName; } throw new HttpException(SR.GetString( SR.Invalid_collection_item_type, new String[] { controlTypeName, _itemType.FullName, tagName, childType.FullName})); } } return childType; } ///[To be supplied.] ////// public override void AppendLiteralString(string s) { if (_ignoreUnknownContent) return; // Don't allow non-whitespace literal content if (!Util.IsWhiteSpaceString(s)) { throw new HttpException(SR.GetString( SR.Literal_content_not_allowed, ControlType.FullName, s.Trim())); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.[To be supplied.] ///
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GeometryHitTestResult.cs
- TreeNode.cs
- OdbcRowUpdatingEvent.cs
- PageAdapter.cs
- WmlLiteralTextAdapter.cs
- OutputWindow.cs
- EdmRelationshipRoleAttribute.cs
- FunctionImportElement.cs
- ItemAutomationPeer.cs
- FillErrorEventArgs.cs
- Grant.cs
- CollectionViewGroupInternal.cs
- EntityDataSourceChangedEventArgs.cs
- IteratorDescriptor.cs
- HierarchicalDataTemplate.cs
- ClickablePoint.cs
- PropertyChangeTracker.cs
- LogAppendAsyncResult.cs
- DeflateStreamAsyncResult.cs
- EventBindingService.cs
- CodeBlockBuilder.cs
- TdsParser.cs
- DbLambda.cs
- CookieProtection.cs
- oledbmetadatacollectionnames.cs
- DeleteCardRequest.cs
- CryptoKeySecurity.cs
- PageWrapper.cs
- DateTimeParse.cs
- RestHandler.cs
- DataGridAddNewRow.cs
- TraceSection.cs
- EntityCommandCompilationException.cs
- EntityDesignerBuildProvider.cs
- FloaterParagraph.cs
- CheckoutException.cs
- ImageField.cs
- AffineTransform3D.cs
- HwndKeyboardInputProvider.cs
- DataObjectCopyingEventArgs.cs
- RelatedView.cs
- HttpHandlerAction.cs
- TextEmbeddedObject.cs
- Dynamic.cs
- WebPartHeaderCloseVerb.cs
- NoResizeHandleGlyph.cs
- WpfXamlType.cs
- TransformProviderWrapper.cs
- EnumBuilder.cs
- ColorConverter.cs
- InteropAutomationProvider.cs
- ProcessingInstructionAction.cs
- propertyentry.cs
- WindowsScrollBar.cs
- ProxyWebPart.cs
- TdsParserStaticMethods.cs
- TypeSystem.cs
- LogEntrySerialization.cs
- CultureSpecificStringDictionary.cs
- TypeReference.cs
- BitmapEffectDrawing.cs
- CharEntityEncoderFallback.cs
- RelationshipConverter.cs
- FormsAuthenticationTicket.cs
- EntityDataSourceContextCreatedEventArgs.cs
- TableRow.cs
- Model3DGroup.cs
- VerticalAlignConverter.cs
- RectValueSerializer.cs
- WebBrowserBase.cs
- NullReferenceException.cs
- WorkflowMessageEventHandler.cs
- BooleanAnimationBase.cs
- DesignerVerbCollection.cs
- CacheMemory.cs
- DayRenderEvent.cs
- CharacterHit.cs
- UTF8Encoding.cs
- DesignTimeParseData.cs
- HttpPostClientProtocol.cs
- NamespaceQuery.cs
- DataSourceDescriptorCollection.cs
- SByteStorage.cs
- PolicyLevel.cs
- _SSPISessionCache.cs
- PermissionSet.cs
- SystemUdpStatistics.cs
- LoginViewDesigner.cs
- Clock.cs
- DataColumnMappingCollection.cs
- BitStack.cs
- _SingleItemRequestCache.cs
- GetBrowserTokenRequest.cs
- documentsequencetextview.cs
- FormsAuthentication.cs
- MergeFailedEvent.cs
- PublishLicense.cs
- SafeCertificateStore.cs
- DictionaryManager.cs
- IncrementalReadDecoders.cs