ExpressionBuilder 类
在分析页的过程中计算表达式。
System.Web.Compilation.ExpressionBuilder
System.Web.Compilation.AppSettingsExpressionBuilder
System.Web.Compilation.ConnectionStringsExpressionBuilder
System.Web.Compilation.ResourceExpressionBuilder
System.Web.Compilation.RouteUrlExpressionBuilder
System.Web.Compilation.RouteValueExpressionBuilder
命名空间: System.Web.Compilation
程序集: System.Web(在 System.Web.dll 中)
ExpressionBuilder 类型公开以下成员。
名称 | 说明 | |
---|---|---|
Equals(Object) | 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。) | |
EvaluateExpression | 在派生类中重写时,会返回一个对象,该对象表示计算出的表达式。 | |
Finalize | 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。) | |
GetCodeExpression | 在派生类中重写时,返回在页执行过程中用来获取计算出的表达式的代码。 | |
GetHashCode | 用作特定类型的哈希函数。 (继承自 Object。) | |
GetType | 获取当前实例的 Type。 (继承自 Object。) | |
MemberwiseClone | 创建当前 Object 的浅表副本。 (继承自 Object。) | |
ParseExpression | 在派生类中重写时,会返回一个对象,该对象表示通过分析得到的表达式。 | |
ToString | 返回表示当前对象的字符串。 (继承自 Object。) |
ExpressionBuilder 类是在分析页的过程中创建代码表达式的表达式生成器(如 AppSettingsExpressionBuilder 类)的基类。
表达式生成器分析声明性表达式,并创建代码来检索绑定到控件属性的值。在非编译方案中,支持非编译功能的表达式生成器在运行时计算表达式。
页分析器如果遇到用 <%$ %> 字符串分隔的表达式,则根据字符串中的前缀为表达式创建表达式生成器。前缀是字符串中冒号 (:) 左侧的部分。例如,当分析器遇到字符串 <%$ ConnectionStrings:MessageDB %> 时,会创建一个 ConnectionStringsExpressionBuilder 对象。前缀与 Web.config 文件的 ExpressionBuilders 节中的表达式生成器相关联。
声明性表达式的右侧被传递给表达式生成器进行计算。重写 GetCodeExpression 方法可生成与页一起编译的代码。
如果希望自定义表达式生成器在不编译的页上是活动的,还必须重写 EvaluateExpression 方法以返回表示表达式结果的对象。此外,还必须重写 SupportsEvaluate 属性,以指示自定义表达式生成器不支持非编译页。
可以定义一组属性和方法,用于选择和计算在设计时使用表达式编辑器与控件属性进行关联的表达式。编辑器通过类级别的元数据在表达式生成器上进行标记。有关更多信息,请参见 ExpressionEditor。
对继承者的说明
从 ExpressionBuilder 类继承时,必须重写 GetCodeExpression 方法。
下面的代码示例演示如何通过实现 ExpressionBuilder 抽象类来构建自定义表达式生成器。 ExpressionBuilder 的此实现返回一条计算出的语句,该语句被传递给表达式。若要运行此示例,必须首先在 Web.config 文件中注册自定义表达式生成器。第一个代码示例演示如何在 Web.config 文件中注册自定义表达式生成器。
<configuration> <system.web> <compilation> <expressionBuilders> <add expressionPrefix="MyCustomExpression" type="MyCustomExpressionBuilder"/> </expressionBuilders> </compilation> </system.web> </configuration>
第二个代码示例演示如何在 .aspx 文件中引用表达式。
<asp:Label ID="Label1" runat="server" Text="<%$ MyCustomExpression:Hello, world! %>" />
第三个代码示例演示如何通过从 ExpressionBuilder 派生来开发自定义表达式生成器。若要运行此代码示例,必须将该类放入 App_Code 文件夹中。
using System; using System.CodeDom; using System.Web.UI; using System.ComponentModel; using System.Web.Compilation; using System.Web.UI.Design; // Apply ExpressionEditorAttributes to allow the // expression to appear in the designer. [ExpressionPrefix("MyCustomExpression")] [ExpressionEditor("MyCustomExpressionEditor")] public class MyExpressionBuilder : ExpressionBuilder { // Create a method that will return the result // set for the expression argument. public static object GetEvalData(string expression, Type target, string entry) { return expression; } public override object EvaluateExpression(object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { return GetEvalData(entry.Expression, target.GetType(), entry.Name); } public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { Type type1 = entry.DeclaringType; PropertyDescriptor descriptor1 = TypeDescriptor.GetProperties(type1)[entry.PropertyInfo.Name]; CodeExpression[] expressionArray1 = new CodeExpression[3]; expressionArray1[0] = new CodePrimitiveExpression(entry.Expression.Trim()); expressionArray1[1] = new CodeTypeOfExpression(type1); expressionArray1[2] = new CodePrimitiveExpression(entry.Name); return new CodeCastExpression(descriptor1.PropertyType, new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(base.GetType()), "GetEvalData", expressionArray1)); } public override bool SupportsEvaluate { get { return true; } } }
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2
.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见 .NET Framework 系统要求。