【发布时间】:2011-11-20 23:07:50
【问题描述】:
所以在 .NET 中我们有...
<%=
<%: (new to .NET 4 - syntactic sugar for HTML encoding)
<%#
<%@
这些到底是什么?
还有更多吗?是否有详尽的清单以及它们在哪里?甚至很难知道要搜索什么 - 我什至没有听说过“代码块”这个词,直到今晚我发现
【问题讨论】:
标签: asp.net .net webforms-view-engine
所以在 .NET 中我们有...
<%=
<%: (new to .NET 4 - syntactic sugar for HTML encoding)
<%#
<%@
这些到底是什么?
还有更多吗?是否有详尽的清单以及它们在哪里?甚至很难知道要搜索什么 - 我什至没有听说过“代码块”这个词,直到今晚我发现
【问题讨论】:
标签: asp.net .net webforms-view-engine
它们通常被称为代码块,但该术语在 Microsoft 文档中不存在。 Microsoft 将它们称为 内联表达式,如 Introduction to ASP.NET inline expressions in the .NET Framework。它们提供有关如何处理这些符号 () 中的语句的 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 >”,它会在页面上添加一个按钮。当然会有验证,但希望重点是清楚。)
<%: --Encoded code nugget --类似于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 Form(或控件或母版页,取决于指令的种类。例如。
<%@ Page.. <%@ Master
上述所有信息和示例均来自 Adam Freeman 的 Pro ASP .NET 4.5 书籍第 12 章。imo 的优秀书籍。
【讨论】:
我不确定所有这些 WebForm 标签是否都有一个正确的集体名称,但它们都应该包含在 ASP.NET Page Syntax 中。
还有一个不在列表中,ASP.NET Expressions:
<%$ expressionPrefix: expressionValue %>
【讨论】:
很难明确和确定名称,因为 Microsoft 通常不明确和确定。比如我不知道<%: ... %>叫什么名字。
也很难确定当前的文档是什么,微软正在努力解决这个问题。
下表交叉引用了Introduction to ASP.NET inline expressions in the .NET Framework 中的内容和ASP.NET Page Syntax 中的内容。
语法 |支持文章 |文档 |嵌入式代码块 |内联代码(请参阅代码渲染块) |内联表达式块 |内联表达式(请参阅代码渲染块) |文本模板指令 |文本模板指令 |数据绑定表达式 |数据绑定表达式 |表达式生成器 | ??? |服务器端评论 |服务器端评论 |不适用 |不适用嵌入式代码块提供与经典 ASP 的向后兼容性,并且也被 PHP 和 JSP 使用。由于它们嵌入在 HTML 中,因此往往会使 HTML 难以阅读和维护。
内联表达式块的执行就像它是 Response.Write(…) 语句的参数一样。
与 相同,其中 ... 是 Server.HtmlEncode 的参数。
文本模板指令指定页面和用户控件编译器在处理 ASP.NET Web 窗体 (.aspx) 页面和用户控件 (.ascx) 文件时使用的设置。
数据绑定表达式将服务器控件属性绑定到数据源。
表达式生成器将控件属性的值设置为应用程序配置或资源文件中的值。表达式构建器表达式包括:
Expression Prefix: Expression Value
其中,表达式前缀是一种表达式,例如 Web.config 文件中的节点,表达式值是节点中键的名称。结果是为键指定的值。
服务器端注释块允许将 cmets 放置在 HTML 中除代码块之外的任何位置。
以下内容也在 Microsoft Docs 文档页面中,以防万一。
语法 |文档【讨论】:
在介绍 Visual C# 2010 时,作者 Adam Freeman 写道:
标签的官方术语是服务器端脚本 分隔符 尽管它们通常被称为代码 掘金。
【讨论】: