我使用ASP.NET Web Forms和ASP.NET MVC有一段时间了。
因此视图中的<%= %>
意味着Response.Write()
,MVC中引入的<%: %>
添加了html转义。
在SqlDataSource控件设计器中生成类似于ConnectionString="<%$ ConnectionStrings:FooConnectionString %>"
的内容,在中继器中使用<%# Eval("") %>
sytax。
我的问题是<%$ %>
和<%# %>
标签到底是什么,它们转换成什么方法,它们的行为如何?
<%$ %>
是表达式语法。
AppSettings、Resources和ConnectionStrings有一些内置的快捷方式。你也可以自己写。
<%# %>
是数据绑定表达式语法。
这在数据绑定控件中用于解析要绑定的对象的属性值。
我不久前从一本书中截取了这段文字(我记不清是哪本书了(,因为我认为它很好地解释了<%# %>
语法-
熟悉经典ASP应用程序的人可能会认为<%#%>语法看起来非常熟悉。目的相似,但你需要确保你不会因为这样做而混淆两者可能导致应用程序无法正常运行。而在ASP中(和ASP.NET(,<%=%>语法导致要在渲染时评估的括号,<%#%>唯一的括号ASP.NET仅在绑定期间进行评估。稍后您将看到在本节中,页面和页面上的每个可绑定控件都有一个DataBind((方法。数据绑定中包含的表达式只有当控件的DataBind方法。
这只回答了你一半的问题,但Rob Stevenson Leggett的出色回答涵盖了其他所有问题。我只是想通过进一步的说明来补充这一点。
我写了一篇关于ASP.NET Web Forms中可用的不同类型的表达式的博客文章:
表达式与语句,第2部分:ASP.NET代码块类型(互联网存档(
它解释了以下表达式块:
<%$ %>
ASP.NET表达式语法,用于绑定应用程序设置、连接字符串和资源。
<%# %>
ASP.NET数据绑定语法,仅在调用控件的数据绑定方法时计算。
<% %>
代码块,代码成为RenderMethodDelegate
的一部分。代码应该是语句。使用Response.Write
输出一些内容。
<%= %>
与上面相同,只是代码应该是单个表达式。它将被包裹在HtmlTextWrite.Write()
中。