找不到System.Web.UI.Design.ExpressionEditor?

首先是来自MSDN的说明:
通常,若要在设计时支持新的表达式类型,需要定义一个唯一的表达式前缀并提供自定义的 ExpressionBuilderExpressionEditor 实现。您可以选择提供自定义 ExpressionEditorSheet 实现,该实现定义用于在表达式对话框中构成表达式的属性。

表达式前缀标识自定义表达式类型,并将表达式与表达式生成器和表达式编辑器关联。当在页中分析自定义表达式时,表达式前缀用于创建关联的 ExpressionBuilderExpressionEditor 类的实例。若要将表达式前缀与表达式生成器和表达式编辑器关联,请将 ExpressionEditorAttributeExpressionPrefixAttribute 属性应用到自定义 ExpressionBuilder 类,并为 Web 配置文件中 expressionBuilders 元素中的表达式生成器配置表达式前缀。该前缀不是必需的,但强烈建议您配置它。

给继承者的说明 派生自定义 ExpressionEditor 类时需要下列步骤:

  • 重写 EvaluateExpression 方法以在设计时计算自定义表达式类型。

  • 您可以选择重写 GetExpressionEditorSheet 方法来返回自定义类,该自定义类定义组合以形成自定义表达式的属性。

  • ExpressionBuilder 类声明上应用 ExpressionEditorAttribute 属性,以将自定义表达式生成器和派生的表达式编辑器类关联。

例如,ResourceExpressionEditor 类从 ExpressionEditor 类派生并提供实现,以便在设计时计算资源字符串引用并将该引用与控件属性关联。ResourceExpressionBuilder 类与表达式前缀 ResourcesResourceExpressionEditor 实现关联。GetExpressionEditorSheet 方法返回一个 ResourceExpressionEditorSheet,后者定义构成资源引用表达式的各个属性。

示例(其实比MSDN的示例还要简单一些,但是结构是完全一样的):
using System;
using System.CodeDom;
using System.Configuration;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.Compilation;
using BusinessLogic.Security;

[ExpressionEditor(
typeof(PermissionCheckExpressionBuilderEditor))]
[ExpressionPrefix(
"PermissionCheck")]
public class PermissionCheckExpressionBuilder : ExpressionBuilder
{
    
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
    
{
        
string taskName = entry.Expression;
        
return new CodePrimitiveExpression(AzHelper.IsPermissible(taskName));
    }


}


public class PermissionCheckExpressionBuilderEditor : System.Web.UI.Design.ExpressionEditor
{
    
public override object EvaluateExpression(string expression, object parseTimeData, Type propertyType, IServiceProvider serviceProvider)
    
{
        
string taskName = expression;
        
return AzHelper.IsPermissible(taskName);
    }

}

PS:请注意标注为红色部分的代码(System.Web.UI.Design.ExpressionEditor
但是奇怪的很,编译总是通不过,提示说:
The type or namespace name 'ExpressionEditor' does not exist in the namespace 'System.Web.UI.Design' (are you missing an assembly reference?)
可是MSDN上面明明写着就是这个命名空间啊?怎么回事呢?大家试一下,看看有没有这个问题啊?


 

posted @ 2007-07-21 15:53  yangli  阅读(1628)  评论(4编辑  收藏  举报