Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Compilation / RouteUrlExpressionBuilder.cs / 1305376 / RouteUrlExpressionBuilder.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.CodeAnalysis;
using System.Web.UI;
using System.Web.Routing;
using System.Collections.Generic;
[ExpressionPrefix("Routes")]
[ExpressionEditor("System.Web.UI.Design.RouteUrlExpressionEditor, " + AssemblyRef.SystemDesign)]
public class RouteUrlExpressionBuilder : 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()),
"GetRouteUrl",
new CodeThisReferenceExpression(),
new CodePrimitiveExpression(entry.Expression.Trim()));
}
public override object EvaluateExpression(object target, BoundPropertyEntry entry,
object parsedData, ExpressionBuilderContext context) {
return GetRouteUrl(context.TemplateControl, entry.Expression.Trim());
}
public static bool TryParseRouteExpression(string expression, RouteValueDictionary routeValues, out string routeName) {
routeName = null;
if (String.IsNullOrEmpty(expression))
return false;
string[] pieces = expression.Split(new char[] { ',' });
foreach (string piece in pieces) {
string[] subs = piece.Split(new char[] { '=' });
// Make sure we have exactly =
if (subs.Length != 2) {
return false;
}
string key = subs[0].Trim();
string value = subs[1].Trim();
if (string.IsNullOrEmpty(key)) {
return false;
}
if (key.Equals("RouteName", StringComparison.OrdinalIgnoreCase)) {
routeName = value;
}
else {
routeValues[key] = value;
}
}
return true;
}
[SuppressMessage("Microsoft.Design", "CA1055", Justification = "Consistent with other URL properties in ASP.NET.")]
// Format will be <%$ ExpPrefix: RouteName = , Key=Value, Key2=Value2 %>
public static string GetRouteUrl(Control control, string expression) {
if (control == null) {
throw new ArgumentNullException("control");
}
string routeName = null;
RouteValueDictionary routeParams = new RouteValueDictionary();
if (TryParseRouteExpression(expression, routeParams, out routeName)) {
return control.GetRouteUrl(routeName, routeParams);
}
else {
throw new InvalidOperationException(SR.GetString(SR.RouteUrlExpression_InvalidExpression));
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SingleAnimationUsingKeyFrames.cs
- ParallelEnumerableWrapper.cs
- DataGridColumnCollectionEditor.cs
- DataControlField.cs
- MonthCalendarDesigner.cs
- LeafCellTreeNode.cs
- FaultDesigner.cs
- MatrixTransform3D.cs
- FileLoadException.cs
- MetadataCache.cs
- PresentationAppDomainManager.cs
- SettingsBase.cs
- AdCreatedEventArgs.cs
- ValuePattern.cs
- MimeTypePropertyAttribute.cs
- ContentIterators.cs
- ItemsPresenter.cs
- DispatcherHooks.cs
- DataSourceSelectArguments.cs
- PolyQuadraticBezierSegment.cs
- TargetInvocationException.cs
- DataGridViewAutoSizeModeEventArgs.cs
- BasicKeyConstraint.cs
- BamlBinaryReader.cs
- ReliableDuplexSessionChannel.cs
- Point3DIndependentAnimationStorage.cs
- StreamGeometry.cs
- GlobalEventManager.cs
- CapiSafeHandles.cs
- SqlDataSourceCommandEventArgs.cs
- AliasedSlot.cs
- ContentValidator.cs
- SecurityDescriptor.cs
- DataStorage.cs
- ParameterModifier.cs
- StreamWriter.cs
- SecurityUniqueId.cs
- OleDbDataAdapter.cs
- SchemaManager.cs
- ThicknessAnimationBase.cs
- KeyFrames.cs
- CryptoStream.cs
- DataViewSetting.cs
- StyleSelector.cs
- ListViewGroupItemCollection.cs
- BrowserCapabilitiesCodeGenerator.cs
- PackageRelationship.cs
- XmlILAnnotation.cs
- ObjectStateManager.cs
- QueryPageSettingsEventArgs.cs
- DataGrid.cs
- PkcsMisc.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- EffectiveValueEntry.cs
- DataGridViewColumnConverter.cs
- EditorBrowsableAttribute.cs
- ADMembershipUser.cs
- XmlKeywords.cs
- SoapEnumAttribute.cs
- Emitter.cs
- DesignTimeVisibleAttribute.cs
- TraceListener.cs
- DockPanel.cs
- IndexOutOfRangeException.cs
- DeclaredTypeElement.cs
- ConnectionPointGlyph.cs
- Missing.cs
- ExpanderAutomationPeer.cs
- DataGridTable.cs
- ListSortDescriptionCollection.cs
- Win32.cs
- EventLogStatus.cs
- CollectionChangeEventArgs.cs
- TailCallAnalyzer.cs
- NavigationProgressEventArgs.cs
- WebPartActionVerb.cs
- InternalDuplexBindingElement.cs
- DataSysAttribute.cs
- TdsParserStateObject.cs
- HelpPage.cs
- DelimitedListTraceListener.cs
- ControlParameter.cs
- Int64Converter.cs
- XmlFormatWriterGenerator.cs
- ToolStripControlHost.cs
- Int32Converter.cs
- UrlMappingsModule.cs
- StrokeNodeEnumerator.cs
- SqlCharStream.cs
- DataBindEngine.cs
- CustomPopupPlacement.cs
- DotExpr.cs
- SplitContainer.cs
- Enum.cs
- _ListenerAsyncResult.cs
- ConstraintCollection.cs
- ImportedPolicyConversionContext.cs
- Int32RectConverter.cs
- MaterialGroup.cs
- CheckBoxAutomationPeer.cs