<%: И <% = то же самое, что блоки вставки кода (выражения) - PullRequest
36 голосов
/ 20 апреля 2010

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

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

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

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

Это одно и то же? Если да, то почему переход от знака равенства к двоеточию.

Ответы [ 3 ]

42 голосов
/ 20 апреля 2010

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

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

12 голосов
/ 31 августа 2010

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

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

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

5 голосов
/ 20 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...