Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / UI / CollectionBuilder.cs / 1 / 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 = parentBuilder.ControlType.GetProperty( 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 = ControlType.GetProperty("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 = ControlType.GetProperty("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())); } } } }[To be supplied.] ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- _NegoState.cs
- SafeFileMappingHandle.cs
- TaskExtensions.cs
- OpacityConverter.cs
- GridViewRowCollection.cs
- FrameworkElementAutomationPeer.cs
- NameSpaceEvent.cs
- TriState.cs
- EntityType.cs
- ClusterRegistryConfigurationProvider.cs
- RuntimeConfig.cs
- Propagator.cs
- XmlDataSourceView.cs
- FeatureSupport.cs
- MembershipValidatePasswordEventArgs.cs
- ControlPropertyNameConverter.cs
- TreeIterators.cs
- TextDecorationUnitValidation.cs
- RetriableClipboard.cs
- UpdateManifestForBrowserApplication.cs
- LabelLiteral.cs
- QilIterator.cs
- ReflectionServiceProvider.cs
- DBBindings.cs
- Wildcard.cs
- CollectionView.cs
- UserNameSecurityToken.cs
- LazyTextWriterCreator.cs
- SafeArrayRankMismatchException.cs
- TraceUtility.cs
- SetIterators.cs
- ClientCultureInfo.cs
- StyleXamlParser.cs
- DecoderReplacementFallback.cs
- ServerTooBusyException.cs
- UserValidatedEventArgs.cs
- COM2IDispatchConverter.cs
- _RequestCacheProtocol.cs
- PrintDocument.cs
- AttributeData.cs
- ResourceDictionaryCollection.cs
- DataGridViewRowStateChangedEventArgs.cs
- ETagAttribute.cs
- RectIndependentAnimationStorage.cs
- MulticastIPAddressInformationCollection.cs
- ImageConverter.cs
- SettingsBindableAttribute.cs
- MouseGestureConverter.cs
- AutomationProperty.cs
- EntitySetRetriever.cs
- _NegoStream.cs
- TailCallAnalyzer.cs
- ChangePassword.cs
- ElementHost.cs
- IResourceProvider.cs
- XmlSubtreeReader.cs
- SessionStateSection.cs
- TreeNodeStyle.cs
- unsafenativemethodsother.cs
- TextHintingModeValidation.cs
- ECDsa.cs
- MarshalByValueComponent.cs
- SelfIssuedAuthRSAPKCS1SignatureFormatter.cs
- DynamicActionMessageFilter.cs
- MimeFormatExtensions.cs
- RegexWriter.cs
- TypedRowGenerator.cs
- HelpEvent.cs
- DataObjectAttribute.cs
- TransformDescriptor.cs
- ModelMemberCollection.cs
- PolyLineSegment.cs
- XmlQueryOutput.cs
- Drawing.cs
- DataGridViewCellStateChangedEventArgs.cs
- ChannelTraceRecord.cs
- ExpressionConverter.cs
- QilReplaceVisitor.cs
- DataGridColumnCollection.cs
- ConsoleEntryPoint.cs
- PreviousTrackingServiceAttribute.cs
- SpAudioStreamWrapper.cs
- DataGridViewRowsAddedEventArgs.cs
- Message.cs
- MethodCallTranslator.cs
- MenuStrip.cs
- DifferencingCollection.cs
- ValueChangedEventManager.cs
- DbDataReader.cs
- mongolianshape.cs
- ProtocolsConfigurationHandler.cs
- ItemCheckEvent.cs
- ScalarOps.cs
- QilStrConcatenator.cs
- TeredoHelper.cs
- XmlCharacterData.cs
- GatewayIPAddressInformationCollection.cs
- CompleteWizardStep.cs
- XmlMembersMapping.cs
- BindingCollection.cs