Dlaczego Html.Raw ucieka ampersand w tagu anchor w ASP.NET MVC 4?
Mam adres URL, który chciałbym renderować w tagu kotwicy, tak jak w widoku Razor. Pomyślałbym, że Html.Raw będzie dobrym rozwiązaniem:
@{
string test = "http://someurl.com/someimage.png?a=1234&b=5678";
}
<div>
<a href="@Html.Raw(test)">Test</a>
</div>
Ale to nie działa. Znak ampersand zostaje zakodowany, a kod HTML jest renderowany jako:
<div>
<a href="http://someurl.com/someimage.png?a=1234&b=5678">Test</a>
</div>
Dziwne jest to, że jeśli wykonam wywołanie Html.Raw poza znacznikiem zakotwiczenia, wynik HTML jest zgodny z oczekiwaniami:
<div>
@Html.Raw(test)
<div>
jest renderowany jako:
<div>
http://someurl.com/someimage.png?a=1234&b=5678
</div>
Czy ktoś może wyjaśnić, dlaczego tak jest?
Edytować:
Wypróbowałem kilka innych rzeczy i odkryłem, że poniższe działają zgodnie z oczekiwaniami:
<div data-url="@Html.Raw(test)"></div>
wyjścia:
<div data-url="http://someurl.com/someimage.png?a=1234&b=5678"></div>
Aby dodać trochę więcej kontekstu,moim celem nie jest użycie adresu URL w tagu kotwicy, odhref
s może być kodowane w HTML i nadal działać (użyłem jako przykładu przypadku tagu zakotwiczenia). Raczej chcę użyć adresu URL w<object> <param>
znacznik wartości dla obiektu Flash. Obiekt Flash nie rozpoznaje poprawnie zakodowanego adresu URL HTML, ale nie mogę uzyskać nieprzetworzonego adresu URL do prawidłowego wyjścia.
Jestem w rozterce. Czas przełamać kod źródłowy MVC ...