刚开始使用MVC 2时,我注意到在他们的入门模板中使用了
<%: Html.ActionLink("Home", "Index", "Home")%>
我确信在MVC 1中它是
<%= Html.ActionLink("Home", "Index", "Home")%>
它们是一样的吗?如果是这样,为什么从等号变为冒号。
答案 0 :(得分:42)
冒号语法意味着您将自动进行html编码:http://haacked.com/archive/2009/09/25/html-encoding-code-nuggets.aspx
他们不能只对所有现有的<%=
块进行html编码,因为已经正确编码的东西(希望大多数项目都在那里)看起来很奇怪。
答案 1 :(得分:12)
<%=
用于写入输出缓冲区。
<%:
用于写入输出缓冲区...除非在返回的对象上实现了IHtmlString
接口。
Scott Guthrie在这个主题上有一篇很好的帖子: http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax-for-html-encoding-output-in-asp-net-4-and-asp-net-mvc-2.aspx
如果输出已被转义,则可以通过在返回的对象上实现IHtmlString
接口来防止双重编码。 http://msdn.microsoft.com/en-us/library/system.web.ihtmlstring.aspx
答案 2 :(得分:5)
ASP .NET 4引入了&lt;%:语法,该语法在将输出呈现到屏幕之前对其进行编码。 ASP MVC已经对此进行了编码,但为了更加明确,他们也开始使用语法,以便清楚地表明无论何时看到&lt;%:您都可以确定输出将被正确编码。