<% 的每个含义的列表(<%#、<%= 等等...)
在ASP.NET中,<%#,<%=,<%,<%:等标记是用来在页面中嵌入代码和动态内容的。然而,这些标记的具体用法和作用并不是很清楚,因此需要整理出它们的含义以及使用方法。
首先,<%#标记是用于数据绑定的。它可以将数据源中的值绑定到页面上的控件或标记中。要使用<%#标记,需要在绑定表达式中指定数据源和绑定字段。例如,<%# Eval("FieldName") %>会将数据源中的字段值绑定到页面上。
接下来是<%=标记,它用于将表达式的结果输出到页面上。它类似于Response.Write方法,可以将动态内容直接输出到页面。例如,<%= DateTime.Now %>会在页面上显示当前的日期和时间。
<%标记是用来嵌入代码块的。它可以在页面中执行一些逻辑操作,如循环、条件判断等。代码块中的代码会在页面加载时执行。例如,<% for (int i = 0; i < 10; i++) { %>会在页面加载时执行一个循环,循环10次。
<%:标记是ASP.NET 4中引入的新特性,用于将内容进行HTML编码,防止跨站脚本攻击。它类似于<%=标记,但会自动对输出内容进行HTML编码。例如,<%: "" %>会将输出内容进行HTML编码,防止脚本注入。
以上是<%#,<%=,<%,<%:等标记的含义和使用方法。通过使用这些标记,可以在ASP.NET页面中嵌入代码和动态内容,实现更灵活和动态的页面功能。
ASP.NET中有几种不同的语法:
- `<%$ %>` 表达式语法
- `<%# %>` 数据绑定语法
- `<% %>` 可执行的代码块
- `<%= %>` 语句和表达式
- `<%: %>` HTML编码输出
在ASP.NET 4中引入了HTML编码语法,与`<%= %>`相同,只是结果进行了HTML编码(对于非`IHtmlString`类型)。这种新的语法旨在替代`<%= %>`。
需要注意的是,新的语法只在表达式结果的类型不实现`IHtmlString`接口时进行编码。如果实现了该接口,则不进行任何编码。这就是MVC如何使用其HtmlHelper方法输出标记而不对值进行转义的方式。
对于以上内容的总结,可以得出以下结论:
- ASP.NET中有多种语法可以用于不同的目的。
- 新的HTML编码语法是为了更好地处理HTML编码的输出。
- 通过判断表达式结果的类型是否实现了`IHtmlString`接口来决定是否进行HTML编码。
- MVC中的HtmlHelper方法返回的是`HtmlString`类型而不是`string`类型,这样可以避免对值进行转义。
<a href="http://michielvoo.net/blog/expressions-vs-statements-part-2-asp-net-code-block-types/" rel="nofollow">这里</a>是一个好的起点。 有几种不同的语法:
- [apcode]
<%$ %>
表达式语法
<%# %>
数据绑定语法<% %>
可执行的代码块<%= %>
语句和表达式
ASP.NET 4中新增了HTML编码语法 (haacked),与<%= %>
相同,只是结果进行了HTML编码(对于非IHtmlString
类型)。这种新的语法旨在替代<%= %>
。
<%: %>
HTML编码输出
我今天学到了一些东西(<%: %>
)。谢谢!
顺便说一句,新的语法只有在表达式结果的类型不实现IHtmlString
接口时才进行编码。如果实现了该接口,则不进行任何编码。这是MVC使用其HtmlHelper方法输出标记而不对值进行转义的方式。
Ball - 好的补充。自从MVC2以来,所有的HtmlHelper方法都返回HtmlString
而不是string
。我会将这个添加到答案中。
[/apcode]