【问题标题】:ASP.NET / MVC Syntax [duplicate]ASP.NET / MVC 语法 [重复]
【发布时间】:2013-01-09 15:40:44
【问题描述】:

可能重复:
ASP.NET “special” tags

我正在尝试了解 MVC 应用程序。它有多个用户控件。在这些控件中,我看到如下语法:
<%= ...some text ... %>

我也看过:
<%: ...some text ... %>
<@ ...some text ... %>
<% ...some text ... %>
<%# ...some text ... %>

我可以看到它使我能够在控件/javascript 中编写代码,但我不完全理解 %、%:、%= 和 %# 之间的区别。

它们何时“执行/评估”?

<%= ... => 是在用户控件中还是在 Javascript 函数中用单引号括起来有区别吗?

我什至不确定我的标题是否正确,谷歌搜索时我什么也没得到。 因此,我会很高兴得到解释,对文档链接和正确的术语感到满意。

【问题讨论】:

标签: asp.net asp.net-mvc-4


【解决方案1】:

<%= ...some text ... %>:包含一个表达式。该表达式的结果将调用.ToString(),并直接输出结果字符串。

<%: ...some text ... %>:包含一个表达式。如果表达式结果是IHtmlString,则在其上调用.ToHtmlString(),直接输出结果。否则,该表达式的结果将调用.ToString(),并且结果字符串在输出之前被转义

<@ ...some text ... %>:包含一个页面指令,用于包含命名空间等内容。这是一个编译器指令,并在编译视图时进行评估(通常是第一次调用视图时)。

<% ...some text ... %>:包含一个或多个语句。执行这些语句。

<%# ...some text ... %>:这是 ASP.NET WebForms 中的数据绑定表达式。我认为它不是 MVC 视图的有效语法。但是,您一直提到“用户控件”,它们并不是 MVC 范式的真正组成部分,因此您可能需要重新考虑这个问题是否真的与 MVC 有关。

【讨论】:

    【解决方案2】:

    假设您在 ASP.NET MVC 中使用 WebForms 视图引擎,您需要知道的内容如下:

    • <%= %> - 将输入的评估结果输出到响应。例如<%= "<div>foo</div>" %> 输出<div>foo</div>
    • <%: %> - 与第一个相同,只是它对输出进行 HTML 编码。因此<%: "<div>foo</div>" %> 将输出<div>foo</div>
    • <% %> - 计算服务器上的表达式,但在响应中不输出任何内容。例如,您可以声明一个变量:<% string foo = "foo bar"; %>,稍后您可以使用该变量通过前两种方法之一进行输出
    • <%@ %> - 这仅用于定义视图的 Page 或 Control 指令。它还允许您将命名空间和程序集带入给定视图的范围内。例如,<%@ Import Namespace="System.IO" %> 会将 System.IO 命名空间纳入范围。

    <%# 而言,这在 ASP.NET MVC 中没有使用。这是一个称为数据绑定的概念,仅适用于经典的 WebForms 应用程序。

    【讨论】:

    【解决方案3】:

    <%# ...some text ... %> 用于数据绑定表达式;比如你有类似的东西:

    <asp:itemtemplate>
      <asp:label Text='<%#Eval("Property")%>' .../>
    </asp:itemtemplate>
    

    &lt;%= some text %&gt; 基本上是Response.Write() 的快捷方式

    &lt;%@ some text %&gt; 用于应用程序指令;例如当您需要导入命名空间时:&lt;%@ Import namespace="value" %&gt;

    我刚刚注意到 Stripling 战士的回答与这个回答相得益彰......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-19
      • 2011-04-12
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多