У меня есть контроллер, который генерирует строку, содержащую 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)
c#
asp.net
asp.net-mvc
asp.net-mvc-4
Мукеш Шарма
источник
источник
Html.Raw
должно помочь.HtmlStrin
класс, как вHtmlString str = new HtmlString("<span>Some HTML here</span>");
Ответы:
Вы близки, вы хотите использовать
@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()
, так как вопрос о том, являются ли ваши данные HTML, хранится в вашем контроллере. В среде, где у вас есть фронтенд-разработчики или бэкэнд-разработчики, ваши внутренние разработчики могут быть более осведомлены о том, какие данные могут содержать значения HTML, таким образом сохраняя эту проблему в серверной части (контроллере).Обычно я стараюсь по возможности избегать использования
Html.Raw()
.Еще одна вещь, на которую стоит обратить внимание: я не уверен, куда вы назначаете
str
, но несколько вещей, которые беспокоят меня в том, как вы можете это реализовать.Во-первых, это нужно делать в контроллере, независимо от вашего решения (
IHtmlString
илиHtml.Raw
). С вашей точки зрения, вам следует избегать любой подобной логики, поскольку на самом деле она здесь неуместна.Кроме того, вы должны использовать ваш
ViewModel
для получения значений в вашем представлении (и, опять же, в идеалеIHtmlString
в качестве типа свойства). Увидеть что-то вроде@Html.Encode(str)
этого немного беспокоит, если только вы не делали это только для упрощения своего примера.источник
ты можешь использовать
@Html.Raw(str)
См. MSDN для получения дополнительной информации
источник
У меня была аналогичная проблема с полями ввода HTML в MVC. На веб-странице отображалось только первое ключевое слово поля. Пример: поле ввода: «Быстрая коричневая лиса» Отображаемое значение: «The»
Решением было заключить переменную в кавычки в операторе значения следующим образом:
<input class="ParmInput" type="text" id="respondingRangerUnit" name="respondingRangerUnit" onchange="validateInteger(this.value)" value="@ViewBag.respondingRangerUnit">
источник
Недавно у меня была аналогичная проблема , и Google высадил меня сюда, поэтому я помещаю этот ответ здесь на случай, если и другие приземлятся здесь, для полноты.
Я заметил , что когда я плохо отформатированный HTML , я был на самом деле имея все мои HTML - теги раздели с только несоответствующим содержимым тега остальным . В частности, у меня была таблица с отсутствующим открывающим тегом таблицы, а затем все мои теги html из всей строки были полностью вырваны.
Итак, если вышеперечисленное не работает, и вы все еще чешете в голове, то также проверьте свой html на валидность.
Я заметил, что даже после того, как он заработал, MVC добавлял теги tbody там, где их не было. Это говорит мне, что происходит очистка (MVC 5), и что, когда этого не может произойти, он удаляет все / некоторые теги.
источник