Dokumentacja dla MvcHtmlString
nie jest strasznie oświecania:
Reprezentuje ciąg zakodowany w formacie HTML, którego nie należy ponownie kodować.
Nie jest dla mnie jasne, jakie są tego konsekwencje. Wygląda na to, że niektóre metody pomocnicze HTML zwracają an MvcHtmlString
, ale kilka przykładów, które widziałem online z niestandardowymi pomocnikami, zwraca zwykły ciąg.
Pytania:
Co to jest MvcHtmlString
?
Kiedy należy wybrać MvcHtmlString
nad string
i vice versa? Czemu?
źródło
MvcHtmlString
nie implementuje,IHtmlString
ponieważ istnieje tylko w 4.<%:
Składnia musi być typu kaczego - zawsze zadzwoni.ToHtmlString()
wcześniej,.ToString()
niezależnie od interfejsu.MvcHtmlString.Create
metoda wykrywa, czyIHtmlString
jest dostępna i dynamicznie tworzy zwróconą klasę, aby ją obsługiwać, jeśli jest: windowsitpro.com/article/net-framework/Encoding-and-Strings/…To jest późna odpowiedź, ale jeśli ktoś czytający to pytanie używa brzytwy, powinieneś pamiętać, że brzytwa koduje wszystko domyślnie, ale używając
MvcHtmlString
pomocników HTML możesz powiedzieć brzytwie, że nie musi go kodować .Jeśli chcesz, aby brzytwy nie kodowały ciągu, użyj
Dekompilacja Raw () pokazuje, że owija ciąg znaków w HtmlString
„ HtmlString istnieje tylko w ASP.NET 4.
MvcHtmlString był podkładką kompatybilności dodaną do MVC 2, aby obsługiwać zarówno .NET 3.5, jak i .NET 4. Teraz, gdy MVC 3 to tylko .NET 4, jest to dość trywialna podklasa HtmlString przypuszczalnie dla MVC 2-> 3 dla kompatybilności źródła. „ źródło
źródło
Dobrym praktycznym zastosowaniem tego jest, jeśli chcesz tworzyć własne
HtmlHelper
rozszerzenia. Na przykład nienawidzę próbować zapamiętać<link>
składni znacznika, dlatego stworzyłem własną metodę rozszerzenia, aby utworzyć<link>
znacznik:Mógłbym wrócić
String
z tej metody, ale gdybym miał, to by się zepsuło:<%: Html.CssBlock(Url.Content("~/sytles/mysite.css")) %>
Za
MvcHtmlString
pomocą jednego<%: ... %>
lub<%= ... %>
obu będzie działać poprawnie.źródło
Przydałbyś się,
MvcHtmlString
jeśli chcesz przekazać surowy kod HTML do metody pomocniczej MVC i nie chcesz, aby metoda pomocnicza kodowała HTML.źródło
MvcHtmlString
z metody pomocnika HTML?