строка с <> вокруг нее не отображается при отображении HTML с использованием ASP.NET MVC? - PullRequest
0 голосов
/ 12 января 2011

У меня есть приложение MVC. В одном из представлений ASPX у меня есть выпадающий список. Внутри выпадающего списка у меня есть цикл for, проходящий по списку внутри ViewData. Для каждого элемента в раскрывающемся списке выбора создается опция.

Моя проблема заключается в том, что для одного или нескольких элементов строковое значение может быть заключено в символы "<>".

Однако, когда страница отображается, эта опция вставляется в выпадающий список, но с пустой строкой для значения вместо "".

Что мне нужно сделать, чтобы отобразить "" в атрибуте значения раскрывающегося списка.

Вот мой код:

    <select class="formtext" id="siteSelectDropdown" onchange="siteDropDownChange();" style="display:inline">
<%foreach (WebClientLib.Site site in ViewData["Sites"] as List<WebClientLib.Site>)
  {
      <option value="<%=site.Id %>"><%=site.Name%></option>
  }%>

1 Ответ

8 голосов
/ 12 января 2011

Используйте <%: site.Id %> и <%: site.Name %> вместо версий с =.Или, если вы используете .NET 3.5 или более раннюю версию, вместо этого выполните <%= Html.Encode(site.Id) %>;первый синтаксис - сокращение от .NET 4 для последнего.

Они кодируют строку HTML перед ее выводом, поэтому вместо, например, <hello> вы получите &lt;hello&gt;, что является правильным способом поставить < и > в HTML.

Вы должны привыкнуть ВСЕГДА делать это и никогда не использовать <%= stuff %>, поскольку, как упоминалось в комментарии Анона, последнее оставляет вас открытыми для XSS и других HTML-инъекционные атаки.Действительно, если вы правильно используете HtmlString s в своих моделях и представлениях, вы можете избежать использования небезопасной версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...