ASP.NET 引入了新的表达式构造器(Expression Builder),它使用声明性语法,在运行时用真正的值所代替。表达式值可以来自本地化资源、连接字符串或者配置文件中的应用程序设置。表达式的值在页面被解析的时候被评估。

表达式通常用于在数据源控件中引用一个连接字符串,从而代替直接在属性中设置。你可以用在任何属性的设置,从而避免使用一个静态值。

表达式构造器允许控件属性值在页面解析的时候才被设置,当页面解析遇到这样<%$ prefix:value %>一个格式的时候就会创建一个表示式构造器。

表达式构造器的好处

  • 可以避免书写很长的属性设置代码。表达式构造器运行使用动态的声明语法。
  • 一个表达式构造器可以跨多个页面引用。所有的更改都被集中在一处。
  • 表达式构造器是可以扩展的。你可以定义自己的表达式,在运行时使用自己的表示式处理程序来解析返回值。
  • 表达式构造器语法是语言中立的。可以跨不同的.NET语言使用同一个表示式。
  • 表达式构造器同时提供了运行期和设计期支持。设计器支持意味着当为窗体属性设计表示式的时候可以使用表达式对话框。

表达式构造器语法

表达式构造器的语法如下:

<%$ expression prefix: expression value %>

“$”符号指示ASP.NET这里是一个表达式。expression prefiex定义表达式的类型,如:AppSettions, ConnectionStrings或者字符串资源(String resources)。“:”后面跟的是ASP.NET在运行时真正要替换的表达式的值。

<configuration>  
  <appSettings>  
    <add key="ButtonName" value="ExpressionBuilder"/>  
  </appSettings>  
    
<asp:Button ID="Button1" runat="server" Text='<%$Appsettings:ButtonName %>' />  

看运行结果:

图1 - 这段代码演示了如何使用表达式构造器来设置控件的属性。

表达式构造器的类型

ASP.NET 2.0 提供了3种内建的构造器类型
AppSettingsExpressionBuilder: 返回在Web配置文件AppSettings段用户自定义的key-value键值对
ConnectionStringsExpressionBuilder: 返回在Web配置文件ConnectionString段定义的连接字符串
ResourceExpressionBuilder: 处理应用程序本地化所引用的字符串资源。

<asp:SqlDataSource ID="SqlDataSource1"    
                   ConnectionString="<%$ConnectionStrings:ExpNorthwindConnection %>"    
                   runat="server" />

上面的表示式引用在配置文件connectionStrings定义的名为ExpNorthwindConnection的连接字符串。每个连接字符串都有一个名字,你可以在表示式里引用它。

<add name="ExpNorthwindConnection"    
     connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;User ID=sa;Password=sa"  
     providerName="System.Data.SqlClient" />

CustomExpressionBuilder
ExpressionBuilder类是表达式构造器的基类。当我们定义自己的CustomExpressionBuilder类时,需要继承该类并重写(override)GetCodeExpression方法

实现CustomExpressionBuilder有以下几步:

定义CustomExpressionBuilder

如上面所说,开发一个自定义的ExpressionBuilder需要继承ExpressionBuilder抽象类,并重写GetCodeExpression方法。

public class CustomXmlExpressionBuilder : ExpressionBuilder  

GetCodeExpression返回在一个表示调用方法的表达式。里面用到了CodeDom知识,对CodeDom不熟悉的朋友,请查阅相关资料。大家需要知道的就是ASP.NET需要这样一个类型的返回值来进行表达式解析,他会在这个返回值上执行一些调用、处理。

public override System.CodeDom.CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)   
{   
    CodeTypeReferenceExpression thisType = new CodeTypeReferenceExpression(base.GetType());   
  
    CodePrimitiveExpression expression = new CodePrimitiveExpression(entry.Expression.Trim().ToString());   
  
    string evaluationMethod = " GetXmlKeyValue";   
  
    return new CodeMethodInvokeExpression(thisType, evaluationMethod, new CodeExpression[] { expression });   
  

方法GetXmlKeyValue接受表达式(这里是键“LinkValue”)作为参数,然后查询XML文件,将结果返回(这里是键值“http://www.xwy2.com”)。

public static string GetXmlKeyValue(string expression)   
{   
    XmlDocument xmlSettingDoc = (XmlDocument)HostingEnvironment.Cache["XmlSettings"];   
  
    if (xmlSettingDoc == null)   
    {   
        xmlSettingDoc = new XmlDocument();   
  
        string settingsFile = HostingEnvironment.MapPath("~/XmlFile.xml");   
  
        xmlSettingDoc.Load(settingsFile);   
  
        CacheDependency settingsDepend = new CacheDependency(settingsFile);   
  
        HostingEnvironment.Cache.Insert("XmlPath", xmlSettingDoc, settingsDepend);   
    }   
  
    string getXPATHKey = String.Format("//add[@key='{0}']", expression);   
  
    XmlNode wantedRecord = xmlSettingDoc.SelectSingleNode(getXPATHKey);   
  
    if (wantedRecord != null)   
        return wantedRecord.Attributes["value"].Value;   
  
    return "Unable to Process Expression";   
}

配置Web.config

首先要将上面的CustomXmlExpressionBuilder类放在App_Code文件夹下,然后在Web.config中添加如下的配置:

<compilation debug="true" strict="false" explicit="true">  
  <expressionBuilders>  
    <add expressionPrefix="XmlFile"  
         type="CustomXmlExpressionBuilder"/>  
  </expressionBuilders>  
</compilation >

现在就可以使用我们自定义的表达式构造器了:

<asp:label ID="CustomExpBuilder" runat="server" Text='<%$ XmlFile: LinkValue %>' /> 

这是运行结果:

图2 - 自定义的表达式构造器用来将自定义的声明语法替换为真实值。

示例代码(在VS 2005下编写)

参阅:
主要内容来自: Expression Builders in ASP.NET 2.0

转载于:https://www.cnblogs.com/LoongTsui/archive/2007/08/08/847809.html

ASP.NET 2.0中的表达式构造器(Expression Builder)相关推荐

  1. 在ASP.NET 2.0中使用样式、主题和皮肤

    ASP.NET 2.0的主题和皮肤特性使你能够把样式和布局信息存放到一组独立的文件中,总称为主题(Theme).接下来我们可以把这个主题应用到任何站点,用于改变该站点内的页面和控件的外观和感觉.通过改 ...

  2. 在ASP.NET 2.0中建立站点导航层次

    站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局.默认的站点导航提供程序是基于XML的,但是你 ...

  3. 在ASP.NET 2.0中操作数据教程系列

    在ASP.NET 2.0中操作数据教程系列 Scott Mitchell最近完成了为 www.asp.net 网站撰写的<在ASP.NET 2.0中操作数据 (Working with Data ...

  4. ASP.NET 2.0 中的资源与本地化

    转自MSDN 下载本文的代码:BasicInstincts2006_08.exe (878KB) 本页内容 控制页面级别的区域性设置 使用配置文件跟踪语言首选项 ASP.NET 2.0 中的资源文件 ...

  5. 关于如何在ASP.NET 2.0中定制Expression Builders

    expressions是asp.net 2.0中的新特色,它可以使你在asp.net的页面里很方便的使用自定义的属性. 在ASPX页里只要使用$符号就可以访问到,你定制的属性了. 例如我们看个例子: ...

  6. asp.net 2.0中设定默认焦点按钮

    在asp.net 1.1中,当要在page_load页面中,设置某个控件为默认的焦点按钮(也就是默认焦点是在这个控件上的),可能要用到javascript的代码,而在ASP.NET 2.0中,不用这些 ...

  7. asp.net 2.0中的弹出对话框

    在asp.net 1.1中,要做1个弹出的对话框的话,一般是在服务端的代码中这样写: btnClick.Attributes.Add("onclick", "return ...

  8. asp.net 2.0中一次性更新所有GRIDVIEW的记录

    在asp.net 2.0中,gridview控件是十分不错的控件.有的时候,可能一个GRIDVIEW控件中 的各行都是文本框,如何一次性更新所有修改过的记录呢?有两种方法,一种是使用sqldataso ...

  9. asp.net 2.0 中GridView里设置日期格式

    在asp.net 1.0 中的datagrid 中 设置日期字段格式时用 DataFormatString="{0:yyyy-MM-dd}"即可.    在gridview 中设置 ...

最新文章

  1. Lucene.net中文分词探究
  2. JAVA-JSP内置对象
  3. squid rebuild 阶段swap.state 持续增大耗尽磁盘
  4. 序列化的 serialVersionUID 到底有什么用?
  5. 高级停靠(Dock)技术的实现
  6. cocos2d-x游戏实例(16)-纵版射击游戏(3)
  7. One Order CLOSING date修改后的执行原理
  8. 2020年工作总结大会感悟
  9. umi config.js整体defineConfig配置
  10. 【紫书第五章】String、结构体、部分STL的常见用法
  11. JSP九大内置对象和四大作用域
  12. 电脑更新后,设备管理器未知USB设备,并且蓝牙无法使用
  13. php7.4中让gd库支持jpeg格式
  14. android 手机通过蓝牙连接条形码扫描枪后自动断开连接,Android手机(设备)连接扫描枪扫码遇到的问题...
  15. 直流电阻测量方法介绍
  16. NCU SEM 发文检索2014年
  17. 毕业设计 基于单片机的室内温湿度自动控制系统(源码+硬件+论文)
  18. 计算机组成认知的笔记1000字,[转载]笔记整理——认知负荷理论
  19. iqq for linux源代码,开源qq下载-Linux开源QQ 2012(iQQ)下载 v1.0.2 免费版-IT猫扑网
  20. 数据结构与算法之多路查找树(2-3树、2-3-4树、B树、B+树)

热门文章

  1. 网站建设中你不知道的八大SEO技巧
  2. matlab负荷预测,负荷预测matlab
  3. mac mysql 5.7.9安装教程_mac系统OS X10.10版本安装最新5.7.9mysql的方法_MySQL
  4. java 环境网站404_配置JavaWeb项目环境,修改jdbc配置文件,浏览器报404错误,不修改可以正常部署,jdbc没有改错...
  5. camera客观测试_光学图像测试之屏幕色彩管理测试
  6. vim实用技巧-笔记(第九章)
  7. 解决Linux安装过程中不能安装Grub的问题
  8. 开发日记-20190610 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  9. eolinker 相关
  10. 联邦学习的一些使用库