使用ASP.NET MVC呈现HTML时,<>周围的字符串不显示?

gho*_*_mv 0 c# string asp.net-mvc

我有一个MVC应用程序.在其中一个ASPX视图中,我有一个选择下拉列表.在select下拉列表中,我有一个"for"循环,循环遍历ViewData中的List.对于每个项目,它会在选择下拉列表中创建一个选项.

我的问题是,对于一个或多个项目,字符串值可能包含在"<>"字符中.

但是,在呈现页面时,该选项将插入到选择下拉列表中,但该值为空白字符串而不是"".

如何在dropdown的value属性中渲染"",我该怎么办呢.

这是我的代码:

    <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>
  }%>
Run Code Online (Sandbox Code Playgroud)

Dom*_*nic 8

使用<%: site.Id %><%: site.Name %>不是版本=.或者,如果您使用的是.NET 3.5或更早版本,请执行<%= Html.Encode(site.Id) %>; 前一种语法是后者的.NET 4简写.

这些字符串在输出之前对字符串进行HTML编码,因此不是例如<hello>你会得到的&lt;hello&gt;,这是放入<>放入HTML 的正确方法.

你应该养成一直这样做的习惯,并且从不使用<%= stuff %>,因为正如Anon的评论所提到的,后者让你对XSS和其他HTML注入攻击持开放态度.实际上,如果您HtmlString在模型和viewdata中正确使用s,则可以避免使用不安全的版本.