C# Stringbuilder正在转义HTML符号

C# Stringbuilder正在转义HTML符号,c#,html,asp.net-mvc-3,C#,Html,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>

我有一个视图,它根据模型发送的内容构建一个下拉列表

@{
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");
但在浏览器中,它不是创建下拉列表,而是输出整个字符串Choose…MovieTV ShowShorts


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

您需要的是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());
}
如果字符串是纯字符串,但HtmlString对象按原样呈现,则现在会自动对其进行Html编码


希望这有帮助。

您需要的是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());
}
如果字符串是纯字符串,但HtmlString对象按原样呈现,则现在会自动对其进行Html编码


希望这有帮助。

哦,当然,责怪StringBuilder。您也可以从Model.Choices创建一个选择列表,并使用Html.DropDownList帮助程序。如果您需要代码,请告诉我。作为旁注,您可能需要检查s和Model.Id是否需要编码。除非它们是整数,否则它们可能应该是整数-否则您将面临客户端注入XSS等风险。哦,当然,责怪StringBuilder。您还可以从Model.Choices创建一个选择列表,并使用Html.DropDownList帮助器。如果您需要代码,请告诉我。作为旁注,您可能需要检查s和Model.Id是否需要编码。除非它们是整数,否则它们可能应该是-否则您可能会面临客户端注入XSS等风险。嘿,谢谢您的帮助。我会尽快接受答案。嘿,谢谢你的帮助。我会尽快接受答案。