Відобразити рядок як html у вигляді mpc asp.net


98

У мене є контролер, який генерує рядок, що містить розмітки html. Тепер, коли я відображаю його у поданнях, він відображається як простий рядок, що містить усі теги. Я намагався використовувати Html помічник для кодування / декодування, щоб правильно відобразити його, але він не працює.

string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";

На мої погляди,

@Html.Encode(str)

6
Я думаю, Html.Rawмав би допомогти.
Saeed Neamati

Також я думаю, ви можете використовувати HtmlStrinклас, як вHtmlString str = new HtmlString("<span>Some HTML here</span>");
Saeed Neamati

Відповіді:


168

Ви близькі, якими хочете користуватися @Html.Raw(str)

@Html.Encodeприймає рядки та забезпечує належну обробку всіх спеціальних символів. Сюди входять символи, як пробіли.


6
@ Html.Raw - саме те, що я шукав, дякую за відповідь :)
AFract

IHtmlString, як згадував @Jerad Rose, набагато краще
Пратюш Данука

37

Ви повинні використовувати 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>");

Щоразу, коли у вас є властивості моделі або змінні, для яких потрібно вмістити HTML, я вважаю, що це, як правило, краща практика. Перш за все, це трохи чистіше. Наприклад:

@Html.Raw(str)

У порівнянні з:

@str

Крім того, я також вважаю, що це трохи безпечніше порівняно з використанням @Html.Raw(), оскільки проблема, чи є ваші дані HTML, зберігається у вашому контролері. У середовищі, де у вас є інтерфейсні та внутрішні розробники, ваші внутрішні розробники можуть бути більш співзвучними з тим, які дані можуть містити значення HTML, таким чином зберігаючи цю проблему на задній панелі (контролер).

Я, як правило, намагаюся уникати використання, Html.Raw()коли це можливо.

Ще одна річ, на яку варто звернути увагу, - я не впевнений, куди ви призначаєте str, але кілька речей, які стосуються мене, як ви можете це реалізувати.

По-перше, це слід робити в контролері, незалежно від вашого рішення ( IHtmlStringабо Html.Raw). Вам слід уникати будь-якої подібної логіки на ваш погляд, оскільки вона насправді там не належить.

Крім того, ви повинні використовувати ваш ViewModelдля отримання значень у вашому поданні (і знову ж, в ідеалі використовувати IHtmlStringяк тип властивості). Побачити щось подібне @Html.Encode(str)є трохи стурбованим, якщо ви не робили цього лише для спрощення свого прикладу.


1
Я хотів би зазначити, що контролери призначені для маршрутизації, а не для зберігання даних. Крім того, ваші розробники-розробники повинні знати краще, ніж коли-небудь змінювати існуючий контракт коду. Інтерфейс користувача повинен бути прив'язаний до моделі, і якщо модель кардинально зміниться, ваші модульні тести повинні зірватися.
Ентоні Мейсон

Дякую за вашу відповідь. Мені це подобається.
Thomas.Benz

Так, ця відповідь набагато краща, я спочатку використовував Html.Raw, але коли я прочитав цю відповідь, я негайно переключився
Пратюш Данука

7

ви можете використовувати @Html.Raw(str)

Див. MSDN для більш

Повертає розмітку, яка не закодована у форматі HTML.

Цей метод обертає розмітку HTML за допомогою класу IHtmlString, який відображає некодований HTML.


1

У мене була подібна проблема з полями вводу HTML у MVC. Сторінка на веб-сторінці відображала лише перше ключове слово поля. Приклад: поле введення: "Швидка коричнева лисиця" Відображається значення: "The"

Дозвіл полягав у тому, щоб змінну помістити в лапки у операторі значення наступним чином:

<input class="ParmInput" type="text" id="respondingRangerUnit" name="respondingRangerUnit"
       onchange="validateInteger(this.value)" value="@ViewBag.respondingRangerUnit">

0

У мене була подібна проблема нещодавно, і google посадив мене сюди, тому я поставив цю відповідь тут, якщо інші приземляться і тут, для повноти.

Я помітив , що коли я погано відформатований HTML , я був на насправді маючи всі мої HTML - теги роздягли з тільки невідповідним вмістом тега іншим . У мене особливо була таблиця з відсутнім тегом відкриваючої таблиці, а потім усі мої теги html із цілого рядка були повністю вирвані.

Отже, якщо вищезазначене не працює, і ви все ще чухаєте голову, тоді також перевірте свій html на дійсність.

Я помічаю, навіть після того, як я запрацював, MVC додавав теги tbody там, де у мене їх не було. Це говорить мені, що відбувається очищення (MVC 5), і коли це не може відбутися, воно видаляє всі / деякі теги.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.