Отображение строки в виде html in asp.net вид mvc


у меня есть контроллер, который генерирует строку, содержащую HTML-код накруток.Теперь, когда я показываю его на представлениях, он отображается как простая строка, содержащая все теги. Я попытался использовать HTML helper для кодирования / декодирования, чтобы отобразить его правильно, но он не работает.

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)
4 72

4 ответа:

вы близки вы хотите использовать @Html.Raw(str)

@Html.Encode принимает строки и гарантирует, что все специальные символы обрабатываются должным образом. К ним относятся такие символы, как пробелы.

вы должны использовать 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, хранится в вашем контроллере. В среде, где у вас есть front-end против back-end разработчики, ваши внутренние разработчики могут быть более созвучны с тем, что данные могут содержать значения HTML, таким образом сохраняя эту проблему в фоновом режиме (контроллер).

я вообще стараюсь избегать использования Html.Raw() всякий раз, когда это возможно.

еще одна вещь, которую стоит отметить, я не уверен, где вы назначаете str, но несколько вещей, которые касаются меня с тем, как вы можете реализовать это.

во-первых, это должно быть сделано в контроллере, независимо от вашего решения (IHtmlString или Html.Raw). Вы должны избегать любой логики, подобной этой, на ваш взгляд, поскольку она действительно не принадлежит там.

кроме того, вы должны использовать ваши ViewModel для получения значений в вашем представлении (и снова, в идеале с помощью IHtmlString как тип свойства). Видя что-то вроде @Html.Encode(str) это немного касается, если вы не делали это только для упрощения вашего примера.

вы можете использовать @Html.Raw(str)

посмотреть MSDN дополнительные

возвращает разметку, которая не кодируется HTML.

этот метод обертывает разметку HTML с помощью класса IHtmlString, который рендеринг некодированного HTML.

У меня была аналогичная проблема с полями ввода HTML в MVC. Веб-страница показывала только первое ключевое слово поля. Пример: поле ввода:" The quick brown fox " отображаемое значение:"The"

решение состояло в том, чтобы поместить переменную в кавычки в оператор value следующим образом:

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