<%# %>与<%= %>的区别

7
这是一个重复的问题:ASP.NET“特殊”标签<%# ... %><%= ... %><%$ ... %>有什么区别?
我找不到任何关于这个的信息。使用搜索引擎无法找到“<%=”。
这些标签有名称吗?

1
就术语而言,我认为它们被称为内联表达式。 - AaronLS
5个回答

8

<%= ... %>通常等价于Response.Write(...),但不能在runat="server"的控件属性中使用。

<%: ... %>(自.NET v4.0起)是<%= %>的HTML编码版本(如@Eric所述)。

<%# ... %>用于数据绑定上下文中的Bind、Eval或Output(如@Ray所述)。

<%$ ... %>用于具有runat="server"的控件属性的上下文中(谷歌“表达式生成器”也可以查看制作一个通用的'Code'表达式生成器。当控件需要该属性/参数时,它将被评估。


5

<%# %>将尝试使用Bind()函数绑定到数据源,这使其成为双向功能(读和写)。

<%= %>将使数据只读。


2
另外,<%= %>会打印块之间的任何内容,而<% %>仅执行这些语句。 - Jimmy
2
现在我们也有<%: %>用于HTML编码输出。 - Eric Petroelje

4

<%# %> 在数据绑定时被计算。它不一定需要使用 Eval() 或 Bind(),Matthew 建议 - 我经常使用它来在 Repeater 控件中显示纯文本。

<%= %> 在页面渲染时被计算。等效于调用 Response.Write()。


+1 我正想在另一个答案中询问每个表达式何时被评估。 - AaronLS

1

<%# %> 只能在数据绑定上下文中使用。

<%= %> 期望一个字符串值,然后将其包含在输出流中。因此,只能使用字符串变量或返回字符串的方法。其他任何内容都会导致错误。


0

我找到了一些很好的信息,可以澄清术语,方便你在未来进行谷歌搜索:

http://authors.aspalliance.com/aspxtreme/aspnet/syntax/aspnetpagesyntax.aspx

代码渲染块:

<% inline code %>

HttpResponse.Write的快捷方式:

<%=inline expression %>

数据绑定表达式:

<%# databinding expression %>

在一个属性中:
<tagprefix:tagname property = "<%# databinding expression %>" runat="server" />

服务器端注释,使它们不会出现在客户端的页面源代码中:
<%-- commented out code or content --%>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接