Jak mówi ScottGu w swoim poście na blogu, „domyślnie treść emitowana przy użyciu bloku @ jest automatycznie kodowana w formacie HTML, aby lepiej chronić przed scenariuszami ataku XSS”. Moje pytanie brzmi: jak można wygenerować ciąg znaków inny niż HTML?
Ze względu na prostotę proszę trzymać się tego prostego przypadku:
@{
var html = "<a href='#'>Click me</a>"
// I want to emit the previous string as pure HTML code...
}
asp.net
razor
html-encode
hemme
źródło
źródło
new HtmlString()
w MVC 3, ponieważ ten typ to .NET 4.new HtmlString jest zdecydowanie odpowiedzią.
Przyjrzeliśmy się innym zmianom w składni maszynki do golenia, ale ostatecznie żadna z nich nie była tak naprawdę krótsza niż nowy HtmlString.
Możemy jednak zawrzeć to w pomocniku. Możliwie...
@Html.Literal("<p>something</p>")
lub
@"<p>something</p>".AsHtml()
źródło
Napotkałem ten problem również podczas przenoszenia naszego projektu do nowego silnika widoku Razor. Podejście, które obrałem, było nieco inne, ponieważ musieliśmy generować dane JSON z C # i chcieliśmy je wyprowadzić po załadowaniu strony.
Ostatecznie zaimplementowałem RawView, który był paralelą z View w plikach cshtml. Zasadniczo, aby uzyskać nieprzetworzony ciąg,
@(new HtmlString(View.Foo)) // became @RawView.Foo
Wymaga to kilku zmian w układzie projektu, dlatego właśnie napisałem o tym tutaj wpis na blogu . Krótko mówiąc, wymagało to zduplikowanej implementacji DynamicViewDataDictionary MVC i nowego WebViewPage, który zawiera RawView. Poszedłem również do przodu i zaimplementowałem operator indeksu w RawView, aby umożliwić
@RawView["Foo"]
Nie ma szans, że ktoś będzie potrzebował pętli danych z listą kluczy.
Czytając komentarz Anurse, prawdopodobnie byłoby lepiej, gdybym nazwał to literałem zamiast RawView.
źródło
Używam ASP.NET MVC i Razor w Mono.
Nie mogłem pobrać HtmlHelper z System.Web.WebPages z System.Web.Mvc z pewnych powodów.
Ale udało mi się wyprowadzić niezakodowany ciąg po zadeklarowaniu właściwości modelu jako
RazorEngine.Text.RawString
. Teraz wyprowadza zgodnie z oczekiwaniami.Przykład
@{ var txt = new RawString("some text with \"quotes\""); var txt2 = "some text with \"quotes\""; } <div>Here is unencoded text: @txt</div> <div>Here is encoded text: @txt2</div>
Wynik:
<div>Here is unencoded text: some text with "quotes"</div> <div>Here is encoded text: some text with "quotes"</div>
źródło