To nie jest do końca poprawne. Tak, możesz wstawić nieprzetworzony ciąg, ale jeśli go masz, "'<>etc...zostanie on zastąpiony znakami ucieczki. Prawidłowym sposobem jest użycie MvcHtmlString, który pozwoli na „nielegalne” znaki. Na przykład, jeśli kodujesz dane Jsona ... bez kodowania całego modelu
Daniel B. Chapman
4
Daniel, Html.Raw () „zwraca znaczniki, które nie są zakodowane w HTML”.
NIE koduje cudzysłowów. Oprócz oczywistej dokumentacji stwierdzającej, że jest to zwykły dzień ( „Ta metoda otacza znaczniki HTML za pomocą klasy IHtmlString, która renderuje niezakodowany HTML.” ) Testowałem to i cytaty nie są kodowane.
Oprócz wspomnianego już podejścia @ Html.Raw (string), jeśli wyślesz MvcHtmlString, nie zostanie on zakodowany. Może to być przydatne podczas dodawania własnych rozszerzeń do HtmlHelper lub podczas zwracania wartości z modelu widoku, o którym wiesz, że może zawierać HTML.
<!--this will be encoded --><div>@Model.SampleString</div><!--this will not be encoded --><div>@Html.Raw(Model.SampleString)</div><!--this will not be encoded either --><div>@Model.SampleHtmlString</div>
Należy @Html.Raw()zachować ostrożność, ponieważ może to spowodować więcej problemów z kodowaniem i bezpieczeństwem. Rozumiem przypadek użycia, ponieważ musiałem to zrobić sam, ale ostrożnie ... Po prostu unikaj przepuszczania całego tekstu. Na przykład zachowuj / konwertuj tylko określone sekwencje znaków i zawsze koduj resztę:
Dzięki temu masz pewność, że nie stworzyłeś potencjalnej luki w zabezpieczeniach, a znaki specjalne / obce są poprawnie wyświetlane we wszystkich przeglądarkach.
+1 Dokładnie to, czego potrzebowałem! Ciąg nadal musi być zakodowany, ale znaki powrotu wiersza muszą mieć format HTML. Dzięki!
Peter
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))dla ASP.NET Core
kenjiuno
5
W przypadku ActionLink zazwyczaj używa HttpUtility.Encode na tekście łącza. W takim przypadku możesz użyć
HttpUtility.HtmlDecode(myString)
tego, który zadziałał dla mnie przy użyciu HtmlActionLink do dekodowania ciągu, który chciałem przekazać. na przykład:
"'<>etc...
zostanie on zastąpiony znakami ucieczki. Prawidłowym sposobem jest użycie MvcHtmlString, który pozwoli na „nielegalne” znaki. Na przykład, jeśli kodujesz dane Jsona ... bez kodowania całego modelu"myAttr='hello';myInt=10"
źródło
Oprócz wspomnianego już podejścia @ Html.Raw (string), jeśli wyślesz MvcHtmlString, nie zostanie on zakodowany. Może to być przydatne podczas dodawania własnych rozszerzeń do HtmlHelper lub podczas zwracania wartości z modelu widoku, o którym wiesz, że może zawierać HTML.
Na przykład, jeśli Twój model widoku to:
W przypadku Core 1.0+ (i MVC 5+) użyj HtmlString
następnie
źródło
Należy
@Html.Raw()
zachować ostrożność, ponieważ może to spowodować więcej problemów z kodowaniem i bezpieczeństwem. Rozumiem przypadek użycia, ponieważ musiałem to zrobić sam, ale ostrożnie ... Po prostu unikaj przepuszczania całego tekstu. Na przykład zachowuj / konwertuj tylko określone sekwencje znaków i zawsze koduj resztę:Dzięki temu masz pewność, że nie stworzyłeś potencjalnej luki w zabezpieczeniach, a znaki specjalne / obce są poprawnie wyświetlane we wszystkich przeglądarkach.
źródło
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
dla ASP.NET CoreW przypadku ActionLink zazwyczaj używa HttpUtility.Encode na tekście łącza. W takim przypadku możesz użyć
HttpUtility.HtmlDecode(myString)
tego, który zadziałał dla mnie przy użyciu HtmlActionLink do dekodowania ciągu, który chciałem przekazać. na przykład:źródło
Możesz także użyć metody WriteLiteral
źródło
HTML RAW:
źródło