<%= %> 和 <%# %> 有什么区别?

7

我试图通过Google找到这两者之间的区别,但是我无法找到确切的定义,也无法准确地搜索符号。

现在我知道你可以在<%# %>之间放置一段代码,并且必须调用Page.DataBind()方法以应用它,我认为这就是<%# %>的工作原理。但是<%= %>代表什么意思呢?什么时候该使用它?

3个回答

10

基本区别如下:

<%= %> 表达式是在渲染时计算的。

<%# %> 表达式是在 DataBind() 时计算的,如果没有调用 DataBind(),则根本不会计算。

<%# %> 表达式可以用作服务器控件中的属性。

<%= %> 表达式不能这样做,通常用于引用属性或字段。

例如:

<%= Response.Write() %>

<ItemTemplate>
      <%# DataBinder.Eval("Title") %>
</ItemTemplate>

你可以在此处查看MSDN上更详细的解释: <%= %>和<%# %>有什么区别?

希望这可以帮助你。


所以如果我从您引用的文章中正确理解,<%= %>不能在服务器控件中使用,因为它是在呈现时编写的。它是在页面生命周期的“呈现”部分编写的:页面生命周期 - NomenNescio
如果您在服务器控件中使用它,ASP.NET会将<%= %>转换为HTML,因此在呈现时它不会被呈现,因为ASP.NET认为它是HTML的一部分。 - NomenNescio

4
  • <%= %>用于引用属性/字段。就像在该位置内联一个Response.Write

  • <%# %>用于使用Eval / Bind进行数据绑定。取自MSDN

Eval方法在数据绑定控件(如GridView,DetailsView和FormView控件)的模板中评估后期绑定数据表达式。运行时,Eval方法调用DataBinder对象的Eval方法,

ASP.NET 4.0引入了<%: something %>,类似于<%= %>但转义内容(因此将<转换为&lt;等)

因此,最终您只能在某些控件中使用<%# %>(那些从BaseDataBoundControl继承的控件)

这里有一篇文章http://msdn.microsoft.com/en-us/library/aa479321.aspx,讲解了在.NET中如何进行数据绑定。

我会添加一个链接,其中列出了所有特殊的Asp.net内联标签: http://naspinski.net/post/inline-aspnet-tags-sorting-them-all-out-(3c25242c-3c253d2c-3c252c-3c252c-etc).aspx(它不包含<%: %>


我也可以使用<%# %>引用属性/字段,为什么应该使用<%= %>呢? - NomenNescio
它们相似但不同。我们可以这么说:你可以在页面上的任何位置使用 <%= %> ,它可以引用页面方法能够访问到的任何字段/属性/方法。你只能在某些控件内部使用 <# %>,如 GridView,它会连接到在 GridView 中声明的 DataSource(或通常是 BaseDataBoundControl)。对于许多控件(如 GridView),它不仅连接到 DataSource,而且直接连接到当前的 DataRow - xanatos
1
根据我在这篇文章链接中所读到的,您不能将'<%= %>'用作服务器控件的属性。 - NomenNescio
@user1004708 你是正确的。我在使用“anywhere”时想到的是“任何你可以写html控件的地方” :-) 我回答中的解释更正确,用于引用属性/字段。就像在页面上将Response.Write“内联”在那个位置一样。很明显,你不能在服务器端控件的属性中使用Response.Write - xanatos

1
<%= ... %>

用于小块信息,通常来自对象和单个信息,如单个字符串或整数变量:

The Date is now <%= DateTime.Now.ToShortDateString() %>
The value of string1 is <%= string1 %> 

MSDN: 从ASP.NET显示

<%# .. %>

用于绑定表达式,例如Eval和Bind,最常见于数据控件如GridView、Repeater等:

<asp:Repeater ID="rptMeetings" DataSourceID="meetings" runat="server">
    <ItemTemplate>
        <%# Eval("MeetingName") %>
    </ItemTemplate>
</asp:Repeater>

MSDN:数据绑定表达式概述

网络资源:内联 asp.net 标记...整理它们


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