Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Compilation / RouteValueExpressionBuilder.cs / 1305376 / RouteValueExpressionBuilder.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Compilation { using System; using System.Security.Permissions; using System.CodeDom; using System.ComponentModel; using System.Configuration; using System.Diagnostics; using System.Web.UI; using System.Web.Routing; using System.Collections.Generic; [ExpressionPrefix("Routes")] [ExpressionEditor("System.Web.UI.Design.RouteValueExpressionEditor, " + AssemblyRef.SystemDesign)] public class RouteValueExpressionBuilder : ExpressionBuilder { public override bool SupportsEvaluate { get { return true; } } public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { return new CodeMethodInvokeExpression( new CodeTypeReferenceExpression(this.GetType()), "GetRouteValue", new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "Page"), new CodePrimitiveExpression(entry.Expression.Trim()), new CodeTypeOfExpression(new CodeTypeReference(entry.ControlType)), new CodePrimitiveExpression(entry.Name) ); } public override object EvaluateExpression(object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { // Target should always be a control Control control = target as Control; if (control == null) return null; return GetRouteValue(context.TemplateControl.Page, entry.Expression.Trim(), entry.ControlType, entry.Name); } internal static object ConvertRouteValue(object value, Type controlType, string propertyName) { // Try to do any type converting necessary for the property set if (controlType != null && !String.IsNullOrEmpty(propertyName)) { PropertyDescriptor propDesc = TypeDescriptor.GetProperties(controlType)[propertyName]; if (propDesc != null) { if (propDesc.PropertyType != typeof(string)) { TypeConverter converter = propDesc.Converter; if (converter.CanConvertFrom(typeof(string))) { return converter.ConvertFrom(value); } } } } return value; } // Format will be <%$ RouteValue: Key %>, controlType,propertyName are used to figure out what typeconverter to use public static object GetRouteValue(Page page, string key, Type controlType, string propertyName) { if (page == null || String.IsNullOrEmpty(key) || page.RouteData == null) { return null; } return ConvertRouteValue(page.RouteData.Values[key], controlType, propertyName); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Compilation { using System; using System.Security.Permissions; using System.CodeDom; using System.ComponentModel; using System.Configuration; using System.Diagnostics; using System.Web.UI; using System.Web.Routing; using System.Collections.Generic; [ExpressionPrefix("Routes")] [ExpressionEditor("System.Web.UI.Design.RouteValueExpressionEditor, " + AssemblyRef.SystemDesign)] public class RouteValueExpressionBuilder : ExpressionBuilder { public override bool SupportsEvaluate { get { return true; } } public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { return new CodeMethodInvokeExpression( new CodeTypeReferenceExpression(this.GetType()), "GetRouteValue", new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "Page"), new CodePrimitiveExpression(entry.Expression.Trim()), new CodeTypeOfExpression(new CodeTypeReference(entry.ControlType)), new CodePrimitiveExpression(entry.Name) ); } public override object EvaluateExpression(object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { // Target should always be a control Control control = target as Control; if (control == null) return null; return GetRouteValue(context.TemplateControl.Page, entry.Expression.Trim(), entry.ControlType, entry.Name); } internal static object ConvertRouteValue(object value, Type controlType, string propertyName) { // Try to do any type converting necessary for the property set if (controlType != null && !String.IsNullOrEmpty(propertyName)) { PropertyDescriptor propDesc = TypeDescriptor.GetProperties(controlType)[propertyName]; if (propDesc != null) { if (propDesc.PropertyType != typeof(string)) { TypeConverter converter = propDesc.Converter; if (converter.CanConvertFrom(typeof(string))) { return converter.ConvertFrom(value); } } } } return value; } // Format will be <%$ RouteValue: Key %>, controlType,propertyName are used to figure out what typeconverter to use public static object GetRouteValue(Page page, string key, Type controlType, string propertyName) { if (page == null || String.IsNullOrEmpty(key) || page.RouteData == null) { return null; } return ConvertRouteValue(page.RouteData.Values[key], controlType, propertyName); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AppSettingsExpressionBuilder.cs
- XmlDataLoader.cs
- PriorityItem.cs
- NonPrimarySelectionGlyph.cs
- PageAsyncTaskManager.cs
- RuleSettings.cs
- CacheRequest.cs
- ConnectionManagementElement.cs
- XmlResolver.cs
- MatrixAnimationBase.cs
- HttpDictionary.cs
- WebBrowserContainer.cs
- BaseCAMarshaler.cs
- MetaTableHelper.cs
- SecurityContextTokenValidationException.cs
- StrokeCollectionConverter.cs
- BasicCommandTreeVisitor.cs
- TransformerTypeCollection.cs
- TrustSection.cs
- ReplyChannelAcceptor.cs
- PasswordBox.cs
- Base64Stream.cs
- TraceUtils.cs
- SqlNotificationEventArgs.cs
- DataBindingCollection.cs
- ExtenderControl.cs
- ReadWriteObjectLock.cs
- BidPrivateBase.cs
- UInt32Storage.cs
- AbsoluteQuery.cs
- CacheMode.cs
- CodeTypeParameterCollection.cs
- NameSpaceEvent.cs
- x509store.cs
- PageHandlerFactory.cs
- QueryInterceptorAttribute.cs
- XmlSchemaAttribute.cs
- RowVisual.cs
- FixedHighlight.cs
- WebServiceHostFactory.cs
- MostlySingletonList.cs
- MemoryPressure.cs
- DataGridPagerStyle.cs
- HtmlForm.cs
- CharacterShapingProperties.cs
- CharKeyFrameCollection.cs
- ExceptionHandlers.cs
- CalendarDay.cs
- LookupBindingPropertiesAttribute.cs
- ExtensibleClassFactory.cs
- ResourceReferenceExpression.cs
- RIPEMD160Managed.cs
- WebPartConnectVerb.cs
- QilLiteral.cs
- ButtonFieldBase.cs
- SamlAction.cs
- ComplexPropertyEntry.cs
- SafePointer.cs
- DirtyTextRange.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- UserMapPath.cs
- XmlSchemaComplexContent.cs
- NamespaceMapping.cs
- ScrollViewerAutomationPeer.cs
- Quaternion.cs
- ArraySegment.cs
- NonVisualControlAttribute.cs
- Dictionary.cs
- PropertyFilterAttribute.cs
- IntPtr.cs
- XmlImplementation.cs
- ToolStripContainer.cs
- ViewCellRelation.cs
- Brushes.cs
- CookielessHelper.cs
- SizeAnimationBase.cs
- codemethodreferenceexpression.cs
- CodeGenerator.cs
- documentation.cs
- LinkDescriptor.cs
- Cursor.cs
- InfoCardSchemas.cs
- DiscoveryDocumentSerializer.cs
- TrackingStringDictionary.cs
- PermissionListSet.cs
- ExpandCollapsePattern.cs
- WhitespaceRule.cs
- ToolboxItemSnapLineBehavior.cs
- FatalException.cs
- ASCIIEncoding.cs
- SchemaTableOptionalColumn.cs
- DeferredElementTreeState.cs
- SimpleLine.cs
- ClientTargetCollection.cs
- WebPartConnectionCollection.cs
- OlePropertyStructs.cs
- TextSerializer.cs
- DataKeyArray.cs
- BulletedListEventArgs.cs
- PagePropertiesChangingEventArgs.cs