RouteUrlExpressionBuilder.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / 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.
//------------------------------------------------------------------------------ 
// 
//     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

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK