ASP.NET Tutorial/Development/ExpressionBuilder — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Версия 18:30, 26 мая 2010
Creating a Custom ExpressionBuilder
<source lang="csharp">
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.ruponentModel; using System.Web.rupilation; 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">
<asp:Literal ID="Literal1" Text="<%$ lookup:WelcomeMessage %>" runat="Server" />
</form>
</body> </html></source>