• 〈%# 〉与〈%= 〉的区别,显示数据与绑定数据


    有很长时间没来 CSDN 的博客了。今天在社区里看到一个网友提问关于 asp.net 中“<%# %>” 的问题,所以还是想把这篇文章发到自己的博客上。虽然不是非常很高深的问题,但是还是应该多加留意……


    aspx页面中,<%= %> <%# %> 的区别

    关于这个问题,在多数的 ASP.NET 的教材中,都提到了一些。<%= %><%# %>的区别在于:绑定时机不同,<%# %>是在控件调用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!";


    一段文本,虽然它不被包含在任何开始结束标签之间,但是[font='Courier]ASP.NET[/font]也认为它是一个控件。一个[font='Courier]LiteralControl[/font]控件。所以,[font='Courier]<%# %>[/font]就是把值赋给[font='Courier]LiteralControl[/font]控件的Text属性。

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

  • 相关阅读:
    AT2172 Shik and Travel
    bzoj5138 [Usaco2017 Dec]Push a Box
    bzoj3545 [ONTAK2010]Peaks、bzoj3551 [ONTAK2010]Peaks加强版
    bzoj5183 [Baltic2016]Park
    bzoj4423 [AMPPZ2013]Bytehattan
    bzoj2125 最短路
    斐波那契数列小结
    记一场模拟赛
    洛谷2387 BZOJ3669魔法森林题解
    COGS-2638 区间与,异或,询问max
  • 原文地址:https://www.cnblogs.com/kingboy2008/p/2055578.html
Copyright © 2020-2023  润新知