<%= "A " % > 相当于:Response.Write( "A ");
<%# "A " % > 相当于:变量= "A ";
先来看一个例子:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
这句话相当于赋值,把上面这个勾黑句子翻译成后台代码就是:testButton.Text= "Hello, the Internet! ";
第二个例子:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
<%= "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 > ”。也就是说, <%= % > 应早于 <%# % > ,先被“翻译”出来