所以在.NET中我们有......
<%=
<%: (new to .NET 4 - syntactic sugar for HTML encoding)
<%#
<%@
这些到底是什么?
还有更多吗?是否有详尽的清单以及它们在哪里?甚至很难知道要搜索什么——直到今晚我发现 <%: 是什么时,我才听说过“代码块”这个词。
所以在.NET中我们有......
<%=
<%: (new to .NET 4 - syntactic sugar for HTML encoding)
<%#
<%@
这些到底是什么?
还有更多吗?是否有详尽的清单以及它们在哪里?甚至很难知道要搜索什么——直到今晚我发现 <%: 是什么时,我才听说过“代码块”这个词。
它们通常被称为代码块,但该术语在 Microsoft 文档中不存在。Microsoft 将它们称为内联表达式,如 .NET Framework 中的 ASP.NET 内联表达式简介中所述。它们提供有关如何处理这些符号 (<% %>) 中的语句的 ASP.NET 框架指令。在我知道它的名字之前,是的,在社区中询问它有点困难。不确定“详尽”的列表,但有几个比你指定的要多。以下是其他代码块及其用途和示例示例的列表。
符号——名称——描述——例如(格式)
<%
--标准代码块--表示以下语句为C#语句。必须遵循 C# 语法规则。例如。
<% string[] cities = { ""London"", ""New York"", ""Paris"" };
string myCity = cities[new Random().Next(cities.Length)];
Response.Write(myCity);%>
<%=
--内容代码块--与标准cn类似,不同之处在于返回结果直接插入到浏览器的响应中,无需使用Response.Write
. 例如。
<%=textBox.Text%>
(不推荐,包含 html 注入攻击的风险。如果文本框上的输入类似于“ < button type = submit > Submit</button >
”,它会在页面上添加一个按钮。当然会有验证,但希望重点清楚。)
<%:
-- 编码代码块 -- 类似于 <%=,但响应是 HTML 编码的。例如。
Name is <%:textBox.Text%>
(无论文本框中的输入是什么,都会显示出来。如果输入类似于“ < button type = submit > Submit</button >
”,则输出将是“Name is <button type = submit> Submit</button>
”。
<%#
--数据绑定代码块 --表示数据绑定代码块,用于引用当前数据对象。仅可与中继器等数据绑定控件一起使用。
<%#:
-- 编码数据绑定 -- 表示数据绑定值被编码的编码数据绑定代码块。例如。
<asp:Repeater ItemType = ""System.String"" SelectMethod = ""GetCities"" runat = ""server">
<ItemTemplate>
<li > <%# Item % > </li>
</ItemTemplate>
</asp:Repeater>
(如果使用编码 ( <%#:
),它会显示不带解释的文字,推荐。)"
<%$
--属性代码块--用于引用配置值,如Web.config中定义的那些。
<asp:Literal Text = " < %$ AppSettings: cityMessage % > " runat = "server" />
(从配置文件中检索 cityMessage 键的值。)
<%@
--Page 指令--这用于配置 Web 窗体(或控件或母版页,具体取决于指令的类型。例如。
<%@ Page.. <%@ Master
上述所有信息和示例均来自 Adam Freeman 的 Pro ASP .NET 4.5 书籍第 12 章。imo 的优秀书籍。
这些<%@
是指令。有关详尽的列表和文档,请参阅MSDN。
使用时,指令可以位于 .aspx 或 .ascx 文件中的任何位置,但标准做法是将它们包含在文件的开头。每个指令可以包含一个或多个特定于该指令的属性(与值配对)。
是<%
脚本块。这是MSDN中的一个很好的描述
嵌入式代码块是在页面呈现阶段执行的服务器代码。块中的代码可以执行当前页面类中的编程语句和调用函数。
该<%#
块通常在绑定控件中使用。有关更多信息,请参阅这篇短文。
我不确定所有这些 WebForm 标记是否都有正确的集体名称,但它们都应该包含在ASP.NET Page Syntax中。
还有一个不在列表中的ASP.NET 表达式:
<%$ expressionPrefix: expressionValue %>
很难明确和确定名称,因为 Microsoft 通常不明确和确定。例如我不知道叫什么名字<%: ... %>
。
也很难确定当前的文档是什么,微软正在努力解决这个问题。
下表交叉引用了 .NET Framework 中的 ASP.NET 内联表达式简介中的内容和ASP.NET 页面语法中的内容。
语法 | 支持文章 | 文档 <% ... %> | 嵌入式代码块 | 内联代码(请参阅代码渲染块) <%= ... %> | 内联表达式块 | 内联表达式(请参阅代码渲染块) <%@ ... %> | 文本模板指令 | 文本模板指令 <%# ... %> | 数据绑定表达式 | 数据绑定表达式 <%$ ... %> | 表达式生成器 | ??? <%-- ... %> | 服务器端评论 | 服务器端评论 <%: ... %> | 不适用 | 不适用
嵌入式代码块提供与经典 ASP 的向后兼容性,并且也被 PHP 和 JSP 使用。由于它们嵌入在 HTML 中,因此它们往往会使 HTML 难以阅读和维护。
内联表达式块的执行就像它是 Response.Write(...) 语句的参数一样。
与 <%= Server.HtmlEncode(...) %> 相同,其中 ... 是 Server.HtmlEncode 的参数。
文本模板指令指定页面和用户控件编译器在处理 ASP.NET Web 窗体 (.aspx) 页面和用户控件 (.ascx) 文件时使用的设置。
数据绑定表达式将服务器控件属性绑定到数据源。
表达式生成器将控件属性的值设置为应用程序配置或资源文件中的值。表达式生成器表达式包括:
Expression Prefix: Expression Value
其中,Expression Prefix 是一种表达式,例如 Web.config 文件中的节点,Expression Value 是节点中键的名称。结果是为键指定的值。
服务器端注释块允许将注释放置在 HTML 中除代码块之外的任何位置。
以下内容也在 Microsoft Docs 文档页面中,以防万一。
语法 | 文档 <tagprefix:tagname runat="server"/> | 自定义服务器控制 <object id="id" runat="server"/> | 服务器端对象标签 <!-- #include 文件|virtual="文件名" --> | 服务器端包含指令
在介绍 Visual C# 2010 中,作者 Adam Freeman 写道:
<% 和 %> 标记的官方术语是服务器端脚本分隔符,尽管它们通常被称为代码块。