与 的区别

来源:互联网 发布:mac系统撤销快捷键 编辑:程序博客网 时间:2024/04/28 01:10
 <%=   %   > 与   <%#   %   > 的区别在于:绑定时机不同,   <%#   %   > 是在控件调用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   > ”。也就是说,   <%=   %   >   应早于     <%#   %   > ,先被“翻译”出来 
 

原创粉丝点击