Mam kontroler, który generuje ciąg zawierający znaczniki html. Teraz, gdy wyświetlam go na widokach, jest wyświetlany jako prosty ciąg zawierający wszystkie tagi. Próbowałem użyć pomocnika HTML do kodowania / dekodowania, aby wyświetlić go poprawnie, ale nie działa.
string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";
Z moich poglądów
@Html.Encode(str)
c#
asp.net
asp.net-mvc
asp.net-mvc-4
Mukesh Sharma
źródło
źródło
Html.Raw
powinienem pomóc.HtmlStrin
klasy, jak wHtmlString str = new HtmlString("<span>Some HTML here</span>");
Odpowiedzi:
Jesteś blisko, którego chcesz użyć
@Html.Raw(str)
@Html.Encode
pobiera ciągi znaków i zapewnia, że wszystkie znaki specjalne są poprawnie obsługiwane. Należą do nich znaki takie jak spacje.źródło
Zamiast tego powinieneś użyć
IHtmlString
:IHtmlString str = new HtmlString("<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>");
Kiedykolwiek masz właściwości modelu lub zmienne, które muszą przechowywać HTML, uważam, że jest to ogólnie lepsza praktyka. Przede wszystkim jest nieco czystszy. Na przykład:
W porównaniu do:
Uważam również, że jest to trochę bezpieczniejsze niż używanie
@Html.Raw()
, ponieważ obawa, czy dane są w formacie HTML, jest przechowywana w kontrolerze. W środowisku, w którym masz programistów front-end i back-end, twoi programiści zaplecza mogą być bardziej dostrojeni do tego, jakie dane mogą przechowywać wartości HTML, zachowując w ten sposób ten problem na zapleczu (kontrolerze).Generalnie staram się unikać używania,
Html.Raw()
gdy tylko jest to możliwe.Jeszcze jedna rzecz, na którą warto zwrócić uwagę, to to, że nie jestem pewien, gdzie przypisujesz
str
, ale kilka rzeczy, które dotyczą mnie, jak możesz to wdrażać.Po pierwsze, należy to zrobić w kontrolerze, niezależnie od rozwiązania (
IHtmlString
lubHtml.Raw
). Uważasz, że powinieneś unikać takiej logiki, ponieważ tak naprawdę do niej nie należy.Ponadto powinieneś używać swojego
ViewModel
do pobierania wartości do widoku (i ponownie, najlepiejIHtmlString
jako typu właściwości). Widzenie czegoś takiego@Html.Encode(str)
jest trochę niepokojące, chyba że robiłeś to tylko po to, aby uprościć swój przykład.źródło
możesz użyć
@Html.Raw(str)
Zobacz MSDN dla bardziej
źródło
Miałem podobny problem z polami wejściowymi HTML w MVC. Strona internetowa zawierała tylko pierwsze słowo kluczowe pola. Przykład: pole wejściowe: „Szybki rudy lis” Wyświetlana wartość: „The”
Rezolucja polegała na umieszczeniu zmiennej w cudzysłowie w zestawieniu wartości w następujący sposób:
<input class="ParmInput" type="text" id="respondingRangerUnit" name="respondingRangerUnit" onchange="validateInteger(this.value)" value="@ViewBag.respondingRangerUnit">
źródło
Miałem podobny problemNiedawno i wylądowałem tutaj w Google, więc umieściłem tę odpowiedź tutaj, na wypadek gdyby inni też tu wylądowali, dla kompletności.
Zauważyłem, że kiedy miałem źle sformatowany kod HTML , w rzeczywistości wszystkie tagi HTML zostały usunięte , a pozostała tylko zawartość bez tagów . W szczególności miałem tabelę z brakującym otwierającym tagiem tabeli, a następnie wszystkie moje tagi HTML z całego ciągu zostały całkowicie wyrwane.
Więc jeśli powyższe nie działa, a ty nadal drapiesz się po głowie, sprawdź także html jest poprawny.
Zauważyłem, że nawet po uruchomieniu MVC dodawał tbody tbody tam, gdzie ich nie miałem. To mówi mi, że trwa czyszczenie (MVC 5), a jeśli nie może się to zdarzyć, usuwa wszystkie / niektóre tagi.
źródło