Отображение строки в виде 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 ответа:
вы близки вы хотите использовать
@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">