Только что запустив с MVC 2, я замечаю, что в их начинающем обрабатывают по шаблону, они используют
<%: Html.ActionLink("Home", "Index", "Home")%>
и я был уверен, что в MVC 1 это было
<%= Html.ActionLink("Home", "Index", "Home")%>
Действительно ли они - то же самое? Если так, почему изменение от знака "равно" до двоеточия.
синтаксис двоеточия означает, что вы будете автоматически закодированы в HTML: http://haacked.com/archive/2009/09/25/html-encoding-code-nuggets.aspx
Они не могли просто html кодировать все существующие <% =
блоки, потому что то, что уже правильно закодировано (что, надеюсь, есть в большинстве проектов), будет выглядеть странно.
ASP .NET 4 представил синтаксис <%:, который кодировал вывод перед отображением на экране. ASP MVC уже кодировал это, но, чтобы быть более точным, они также начали использовать синтаксис, чтобы прояснить, что всякий раз, когда вы видите <%:, вы можете быть уверены, что вывод будет правильно закодирован.
<%=
используется для записи в выходной буфер.
<%:
используется для записи в выходной буфер после 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