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

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

None.gif < asp:SqlDataSource  ID ="SqlDataSource1"  runat ="server"  ConnectionString ="<%$connectionStrings:Pubs %>"  SelectCommand ="select * from catalog" ></ asp:SqlDataSource >


web.config文件中如下:
None.gif < configuration >
None.gif    
< appSettings />
None.gif  
< connectionStrings >
None.gif    
< add  name ="Pubs"  connectionString ="server=localhost;database=getwant;Trusted_Connection=yes" />
None.gif  
</ connectionStrings >
None.gif
</ configuration >
因为在web.config中默认就有了connectionStrings的这个节点,所以我们很方便的使用add增加了一个属性Pubs.
而如何自定义我们自己使用的节点呢?例如:<%$ Version:MajorMinor%>可以显示当前环境下asp.net的主版本号和次版本号呢?
如果我们直接在页面中输入上面的表达式,编译器会告诉你,Version并没有被定义,请在expressionBuilders节点中定制.其实这时候就要用到ExpressionBuilder类了.

System.Web.Compilation.ExpressionBuilder 就是expression builders的基类.
我们看看web.config中的设置:
None.gif < compilation  debug ="true" >
None.gif            
< expressionBuilders >
None.gif                
< add  expressionPrefix ="Version"  type ="VersionExpressionBuilder" />
None.gif            
</ expressionBuilders >
None.gif        
</ compilation >
怎么样是不是很简单呢?定义一个expressionPrefix为Version就可以了.
不过有人说那个type后面的是什么意思呢,有VersionExpressionBuilder这个类吗?
其实这个是我们自己继承了ExpressionBuilder的类.
None.gif public   class  VersionExpressionBuilder:ExpressionBuilder
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry,object parsedData,ExpressionBuilderContext context)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
string param = entry.Expression;
InBlock.gif        
if (string.Compare(param, "All"true== 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return new CodePrimitiveExpression(string.Format("{0}.{1},{2}.{3}", Environment.Version.Major, Environment.Version.Minor, +
InBlock.gif                Environment.Version.Build, Environment.Version.Revision));
ExpandedSubBlockEnd.gif        }

InBlock.gif        
else if (string.Compare(param, "MajorMinor"true== 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return new CodePrimitiveExpression(string.Format("{0}.{1}", Environment.Version.Major, Environment.Version.Minor));
ExpandedSubBlockEnd.gif        }

InBlock.gif        
else
InBlock.gif            
throw new InvalidOperationException("User $ Version:All or $ Version:MajorMinor");
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}
这时候我们在ASPX页面中如下设置就可以通过编译了:
None.gif  ASP.NET   < asp:Literal  ID ="Literal1"  runat ="server"  Text ="<% $ Version:MajorMinor %>" ></ asp:Literal >
显示的为"ASP.NET 2.0"
把表示式改为:<%$ Version:All %>就会显示为"ASP.NET 2.0,50727.42 "

怎么样是不是很简单呢,呵...

本文参考了elearning的中的Custom Expression Builders章节.

时间非常紧张,家人催我吃饭,我就不多解释了,如果有不懂的,可以给我留言.

转载于:https://www.cnblogs.com/luyu/archive/2005/12/04/290315.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值