【问题标题】:What's the difference between <%= %> and <%# %>?<%= %> 和 <%# %> 有什么区别?
【发布时间】:2011-12-12 09:00:56
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net visual-studio data-binding


    【解决方案1】:

    基本区别是:

    &lt;%= %&gt; 表达式在渲染时进行评估。

    &lt;%# %&gt; 表达式在 DataBind() 时间进行评估,如果未调用 DataBind(),则根本不进行评估。

    &lt;%# %&gt; 表达式可以用作服务器端控件的属性。

    &lt;%= %&gt; 表达式不能并且用于引用属性或字段。

    例如:

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

    你可以在这里对msdn有更详细的解释:What's the difference between <%= %> and <%# %>

    希望这会有所帮助。

    【讨论】:

    • 所以如果我从你引用的文章中理解正确的话, 不能在服务器控件中使用,因为它是在渲染时编写的。它是在页面生命周期的“渲染”部分编写的:page lifecycle
    • 如果您在服务器控件中使用它,asp.net 会将 转换为 html,因此它不会在渲染期间被渲染,因为 asp.net 认为它是 html 的一部分。
    【解决方案2】:
    • &lt;%= %&gt; 用于引用属性/字段。这就像在该位置的页面中有一个Response.Write“内联”。

    • &lt;%# %&gt; 用于与 Eval/Bind 进行数据绑定。取自MSDN

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

    ASP.NET 4.0 引入了&lt;%: something %&gt;,它类似于&lt;%= %&gt;,但会转义内容(因此它将&amp;lt; 转换为&amp;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(它不包含&lt;%: %&gt;

    【讨论】:

    • 我也可以使用 来引用属性/字段,为什么我应该使用 来代替?
    • 它们相似但不同。比方说:您可以在页面上的任何位置使用&lt;%= %&gt;,它可以引用该页面的方法可以访问的任何字段/属性/方法。您只能在某些控件内部使用&lt;# %&gt;,例如GridView,并且它“连接”到在GridView 中声明的DataSource(或通常连接到BaseDataBoundControl)。通过许多控件(如GridView),它不仅连接到DataSource,而且直接连接到当前的DataRow
    • 从我在这篇文章 link 中读到的内容,您不能使用 '' 作为服务器控件的属性。
    • @user1004708 你是对的。对于“任何地方”,我在想“可以在任何地方编写 html 控件”:-) 我的回复中的解释更正确is used to reference properties/fields. It's like having a Response.Write "inlined" in the page at that position.。显然你不能在服务器端控件的属性中Response.Write
    【解决方案3】:
    <%= ... %>
    

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

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

    MSDN: Displaying from ASP.NET

    <%# .. %>
    

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

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

    MSDN: Data-Binding Expressions Overview

    互联网资源:Inline asp.net tags... sorting them all out

    【讨论】:

      猜你喜欢
      • 2010-10-02
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      • 2015-03-26
      • 2013-08-19
      • 2012-05-22
      相关资源
      最近更新 更多