Mega Code Archive

 
Categories / ASP.Net Tutorial / Development
 

Creating a Custom ExpressionBuilder

An ExpressionBuilder  class generates one expression  from another expression.  File: App_Code\LookupExpressionBuilder.cs using System; using System.CodeDom; using System.Web.UI; using System.ComponentModel; using System.Web.Compilation; using System.Xml; using System.Web.Hosting; using System.Web.Caching; namespace MyNamespace {     public class LookupExpressionBuilder : ExpressionBuilder     {         public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)         {             CodeTypeReferenceExpression refMe = new CodeTypeReferenceExpression(base.GetType());             CodePrimitiveExpression expression = new CodePrimitiveExpression(entry.Expression);             return new CodeMethodInvokeExpression(refMe, "GetEvalData", new CodeExpression[] { expression });         }         public override object EvaluateExpression(object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)         {             return GetEvalData(entry.Expression);         }         public override bool SupportsEvaluate         {             get             {                 return true;             }         }         public static string GetEvalData(string expression)         {             XmlDocument lookupDoc = (XmlDocument)HostingEnvironment.Cache["Lookup"];             if (lookupDoc == null)             {                 lookupDoc = new XmlDocument();                 string lookupFileName = HostingEnvironment.MapPath ("~/Lookup.config");                 lookupDoc.Load(lookupFileName);                 CacheDependency fileDepend = new CacheDependency(lookupFileName);                 HostingEnvironment.Cache.Insert("Lookup", lookupDoc, fileDepend);             }             string search = String.Format("//add[@key='{0}']", expression);             XmlNode match = lookupDoc.SelectSingleNode(search);             if (match != null)                 return match.Attributes["value"].Value;             return "[no match]";         }     } }              File: Web.Config <configuration>   <system.web>     <compilation>       <expressionBuilders>         <add expressionPrefix="lookup"            type="MyNamespace.LookupExpressionBuilder" />       </expressionBuilders>     </compilation>   </system.web> </configuration> File: Lookup.config <lookup>   <add key="WelcomeMessage" value="Welcome to our Web site!" />   <add key="Copyright" value="All content copyrighted by the company." /> </lookup> File: ShowLookupExpressionBuilder.aspx <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">     <title>Show LookupExpressionBuilder</title> </head> <body>     <form id="form1" runat="server">     <div>     <asp:Literal ID="Literal1"         Text="<%$ lookup:WelcomeMessage %>"         runat="Server" />     </div>     </form> </body> </html>