Документация для MvcHtmlString
не очень просвещая:
Представляет строку в кодировке HTML, которую не следует кодировать снова.
Мне не ясно, каковы именно последствия этого. Кажется, что некоторые вспомогательные методы HTML возвращают MvcHtmlString
, но несколько примеров пользовательских помощников, которые я видел в Интернете, просто возвращают обычную строку.
Вопросы:
Что такое MvcHtmlString
?
Когда я должен выбрать MvcHtmlString
более , string
и наоборот? Зачем?
источник
MvcHtmlString
не реализуется,IHtmlString
потому что он существует только в 4.<%:
Синтаксис должен быть утилитарного типа - он всегда будет вызываться.ToHtmlString()
раньше,.ToString()
независимо от интерфейса.MvcHtmlString.Create
метод определяет,IHtmlString
доступен ли он, и динамически создает возвращаемый класс для его поддержки, если он есть: windowsitpro.com/article/net-framework/Encoding-and-Strings/…Это поздний ответ, но если кто-то, читающий этот вопрос, использует бритву, вам следует помнить, что бритва кодирует все по умолчанию, но, используя
MvcHtmlString
в своих HTML-помощниках, вы можете сказать бритве, что ей не нужно кодировать ее .Если вы хотите, чтобы бритва не кодировала строку, используйте
Декомпиляция Raw () показывает нам, что он переносит строку в HtmlString
" HtmlString существует только в ASP.NET 4.
MvcHtmlString была оболочкой совместимости, добавленной в MVC 2 для поддержки .NET 3.5 и .NET 4. Теперь, когда MVC 3 является только .NET 4, это довольно тривиальный подкласс HtmlString, предположительно для MVC 2-> 3 для совместимости с исходным кодом. " источник
источник
Хорошее практическое использование этого, если вы хотите сделать свои собственные
HtmlHelper
расширения. Например, я ненавижу пытаться запомнить<link>
синтаксис тега, поэтому я создал собственный метод расширения для создания<link>
тега:Я мог бы вернуться
String
из этого метода, но если бы у меня было следующее сломалось бы:<%: Html.CssBlock(Url.Content("~/sytles/mysite.css")) %>
С
MvcHtmlString
, используя один<%: ... %>
или<%= ... %>
оба будут работать правильно.источник
Вы можете использовать,
MvcHtmlString
если вы хотите передать необработанный HTML-код вспомогательному методу MVC и не хотите, чтобы вспомогательный метод кодировал HTML-код.источник
MvcHtmlString
из вспомогательного метода HTML?