2

我有一个表单,用户可以在其中输入 YouTube 视频的 url。我的代码解析 url 并创建一个嵌入字符串,该字符串存储在我的数据库中。这看起来像:

string rawQuery = uri.Query;
int index = rawQuery.IndexOf("?");
if (index > 0)
                rawQuery = rawQuery.Substring(index).Remove(0, 1);
id = HttpUtility.ParseQueryString(rawQuery).Get("v");

string embedURL = "<iframe width=\"640\" height=\"360\" src=\"http://www.youtube.com/embed/" + id + "\" frameborder=\"0\" allowfullscreen></iframe>";

此字符串存储在数据库中,稍后检索并打印到 HTML 页面。但是,当我查看页面源时,输出最终看起来像这样:

&lt;iframe width=&quot;640&quot; height=&quot;360&quot; src=&quot;http://www.youtube.com/embed/AXaoi6dz59A&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

如何打印此字符串,使其不会转义我的引号和小于/大于符号?

4

3 回答 3

2

我认为你应该使用@Html.Raw(string)

http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx

http://www.arrangeactassert.com/using-html-raw-in-asp-net-mvc-razor-views/

于 2012-04-13T08:03:03.087 回答
1

例如,如果您使用 ViewBag 在视图中输出字符串,请使用

@Html.Raw(ViewBag.EmbedURL)

这告诉框架不对字符串进行编码

于 2012-04-13T08:04:06.163 回答
0

当您在页面中写入字符串时,它就会被编码。使用<%= %>server 标记输出字符串而不对其进行编码:

<%= embedURL %>

您还可以将其包装在一个HtmlString对象中以避免自动编码:

HtmlString html = new HtmlString(embedURL)

然后你可以正常输出它:

<%: html %>

或使用剃须刀:

@html

您还可以使用该Html.Raw方法将其包装在一个HtmlString对象中:

@Html.Raw(embedURL)
于 2012-04-13T08:16:56.080 回答