A documentação para MvcHtmlString
não é terrivelmente esclarecedora:
Representa uma seqüência de caracteres codificada em HTML que não deve ser codificada novamente.
Não está claro para mim quais são exatamente as implicações disso. Parece que alguns métodos auxiliares de HTML retornam um MvcHtmlString
, mas vários exemplos que eu vi on-line de auxiliares personalizados retornam uma sequência regular.
Questões:
O que é um MvcHtmlString
?
Quando devo escolher MvcHtmlString
mais string
e vice-versa? Por quê?
fonte
MvcHtmlString
não é implementadoIHtmlString
porque existe apenas no 4. A<%:
sintaxe deve ser do tipo pato - sempre será chamada.ToHtmlString()
antes,.ToString()
independentemente da interface.MvcHtmlString.Create
método detecta seIHtmlString
está disponível e cria dinamicamente a classe retornada para suportá-lo, se for: windowsitpro.com/article/net-framework/Encoding-and-Strings/…Esta é uma resposta tardia, mas se alguém que está lendo esta pergunta estiver usando o razor, o que você deve lembrar é que o razor codifica tudo por padrão, mas, usando
MvcHtmlString
seus auxiliares html, você pode dizer ao razor que ele não precisa codificá-lo .Se você deseja que o barbeador não codifique uma string, use
Descompilar Raw (), mostra que está quebrando a string em um HtmlString
"O HtmlString existe apenas no ASP.NET 4.
MvcHtmlString foi um calço de compatibilidade adicionado ao MVC 2 para oferecer suporte ao .NET 3.5 e .NET 4. Agora que o MVC 3 é apenas o .NET 4, é uma subclasse bastante trivial do HtmlString, presumivelmente para o MVC 2-> 3, para compatibilidade de origem. " fonte
fonte
Um bom uso prático disso é se você deseja criar suas próprias
HtmlHelper
extensões. Por exemplo, eu odeio tentar lembrar a<link>
sintaxe da tag, então criei meu próprio método de extensão para criar uma<link>
tag:Eu poderia ter retornado
String
deste método, mas se eu tivesse o seguinte quebraria:<%: Html.CssBlock(Url.Content("~/sytles/mysite.css")) %>
Com
MvcHtmlString
, usar um<%: ... %>
ou<%= ... %>
ambos funcionará corretamente.fonte
Você usaria um
MvcHtmlString
se quiser passar o HTML bruto para um método auxiliar do MVC e não desejar que o método auxiliar codifique o HTML.fonte
MvcHtmlString
método auxiliar de HTML?