Stringbuilder正在转义HTML符号

use*_*594 0 html c# asp.net-mvc-3

我有一个观点,即根据模型发送的内容构建一个下拉列表.

@{
StringBuilder sb = new StringBuilder("<select id=\"field"+Model.Id+"\">");
sb.Append("<option>Choose...</option>");
foreach(var s in Model.Choices)
{
    sb.Append("<option>" + s + "</option>");
}
sb.Append("</select>");
var str = sb.ToString();
}

$("#label" + "@Model.Id").html("@str");
Run Code Online (Sandbox Code Playgroud)

但是在浏览器中,它实际上输出的是整个字符串,而不是创建下拉列表 "<select id="field3"><option>Choose...</option><option>Movie</option><option>TV Show</option><option>Shorts</option></select>"

为什么这样做?如何让它显示实际的下拉列表?

Ric*_*ard 6

你需要的是HtmlString.

@{
StringBuilder sb = new StringBuilder("<select id=\"field"+Model.Id+"\">");
sb.Append("<option>Choose...</option>");
foreach(var s in Model.Choices)
{
    sb.Append("<option>" + s + "</option>");
}
sb.Append("</select>");
var str = new HtmlString(sb.ToString());
}
Run Code Online (Sandbox Code Playgroud)

字符串现在自动进行Html编码,如果它们是纯字符串但HtmlString对象按原样呈现.

希望这可以帮助.