Подтвердить что ты не робот

Являются <%: и <% = то же самое, что и элементы кода (выражения)

Только что начав с MVC 2, я заметил, что в своем стартовом шаблоне они используют

<%: Html.ActionLink("Home", "Index", "Home")%>

и я был уверен, что в MVC 1 это было

<%= Html.ActionLink("Home", "Index", "Home")%>
Они одинаковы? Если да, то почему изменение от равного знака до двоеточия.
4b9b3361

Ответ 1

синтаксис двоеточия означает, что вы будете автоматически закодированы html: http://haacked.com/archive/2009/09/25/html-encoding-code-nuggets.aspx

Они не могли просто html кодировать все существующие блоки <%=, потому что вещи, которые уже правильно закодированы (что, надеюсь, большинство проектов там), выглядят странно.

Ответ 2

<%= используется для записи в выходной буфер.

<%: используется для записи в выходной буфер после HTML Кодирование содержимого... Если интерфейс не был реализован на возвращенном объекте.

У Скотта Гатри есть отличный пост на эту тему: 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

Ответ 3

ASP.NET 4 представил синтаксис <%: который закодировал вывод перед его отображением на экран. ASP MVC уже кодировал это, но, чтобы быть более явным, они также начали использовать синтаксис, чтобы дать понять, что всякий раз, когда вы видите <%: вы можете быть уверены, что вывод будет правильно закодирован.