UrlPager source code - RouteValuesExpressionBuilder.cs

/*
 ASP.NET UrlPager control
 Copyright:2009-2010 Webdiyer (http://www.webdiyer.com)
 Source code released under Ms-PL license
 */
using System;
using System.CodeDom;
using System.ComponentModel;
using System.Web.Compilation;
using System.Web.Routing;
using System.Web.UI;

namespace Webdiyer.WebControls {

    [ExpressionPrefix("RouteValues")]
    public class RouteValuesExpressionBuilder : ExpressionBuilder
    {
        public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, 
            ExpressionBuilderContext context)
        {
            Type type = entry.DeclaringType;
            PropertyDescriptor descriptor =
                TypeDescriptor.GetProperties(type)
                    [entry.PropertyInfo.Name];
            CodeExpression[] expressionArray =
                new CodeExpression[3];
            expressionArray[0] = new
                CodePrimitiveExpression(entry.Expression.Trim());
            expressionArray[1] = new
                CodeTypeOfExpression(type);
            expressionArray[2] = new
                CodePrimitiveExpression(entry.Name);

            return new CodeCastExpression(descriptor.PropertyType
                                          , new CodeMethodInvokeExpression(
                                                new CodeTypeReferenceExpression(GetType())
                                                , "GetRouteValues"
                                                , expressionArray));

        }

        public static object GetRouteValues(string expression, Type target, string entry)
        {
            var values = new RouteValueDictionary();
            string[] rarr = expression.Split(',');
            foreach(string s in rarr)
            {
                string[] varr = s.Trim().Split('=');
                if(varr.Length==2)
                values.Add(varr[0].Trim(), varr[1].Trim(new char[]{'\"','\'',' '}));
            }
            return values;
        }
    }
}