与 的区别

 <%=   %   > 与   <%#   %   > 的区别在于:绑定时机不同,   <%#   %   > 是在控件调用DataBind函数的时候才被确定。对于   <%=   %   > ,我想你应该不会陌生,在ASP时代,它就相当于   Response.Write。在ASP.NET时代也一样。暂时先不去理会教材中说的,也先把“绑定时机”放到一边。   <%=   %   > 与   <%#   %   > 的区别是:前者是输出,而后者是赋值!即:      

          <%=   "A "   %   >   相当于:Response.Write( "A ");  

          <%#   "A "   %   >   相当于:变量= "A ";  

先来看一个例子:       

< html    >    
< body    >    
< asp:Button    Text =   <%#    "Hello,   the   Internet! "   %    >    RunAt= "Server "   ID= "testButton "   /   >   
</ body    >    
</ html    >  


这句话相当于赋值,把上面这个勾黑句子翻译成后台代码就是:testButton.Text= "Hello,   the   Internet! ";  

第二个例子:   

< html    >    
< body    >    
<% =     " Hello,   the   Internet!  "    %    >  
< %#    " Hello,   the   Internet!  "    %    >    
</ body    >    
</ html    >    

<%=   "Hello,   the   Internet! "   %   >   就相当于:Response.Write( "Hello,   the   Internet! ");  

那么第二个   <%#   %   > 怎么解释呢?如果按照我“赋值”的说法,它把值赋给谁了呢?  

其实翻译成后台代码是这样的:(new   System.Web.UI.LiteralControl()).Text= "Hello,   the   Internet! ";   
一段文本,虽然它不被包含在任何开始结束标签之间,但是ASP.NET也认为它是一个控件。一个LiteralControl控件。所以,   <%#   %   > 就是把值赋给LiteralControl控件的Text属性。  

我做过一个生成静态   HTML   代码的类,使用的手法是包装了   HtmlTextWriter   这个类。并且我做了跟踪调试。跟踪的结果令我感到很意外。ASP.NET   会把所有的未标有“runat=server”属性的标记,统统看作是一个   LiteralControl   控件。例如在上面那些   HTML   代码里,例如在文章开始处的那些   HTML   代码里,ASP.NET   会认为是有三个服务器控件,分别是:LiteralControl、Button、LiteralCtontrol。第一个   LiteralControl   的   Text   值为“   <html   >   <body   > Hello,   the   Internet!”,而最后一个   LiteralControl   的   Text   值是“   </body   >   </html   > ”。也就是说,   <%=   %   >   应早于     <%#   %   > ,先被“翻译”出来 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值