我想将数据从HTML传递给AngularJs。这很好:
<div ng-init='initModel(@Model.ToJson())'></div>
实际HTML:
<div ng-init='initModel({
...
"description": "<pre><code><script>alert(\"test\");</script>\n</code></pre>",
"title": "tes testse stsets sets"
}
},
...
})'></div>
描述已正确编码。 &lt; pre&gt;和&lt;代码&gt;元素未编码,这是受信任的HTML。 &lt; script&gt;标签已编码。
在我的AngularJs控制器中,我有这个功能:
$scope.initModel = function(model) {
$scope.data = model.response.data;
}
如果我在此函数中放置断点,则模型的输出为:
"<pre><code><script>alert("test");</script>↵</code></pre>"
看起来AngularJs通过执行此initModel()函数解码所有HTML字符,但为什么呢?我想要在HTML中呈现相同的编码。
一些想法?
谢谢!
答案 0 :(得分:0)
问题出在ToJson()函数中:
public static class JsonHelpers
{
public static IHtmlString ToJson<T>(this T obj)
{
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Formatting.Indented,
TypeNameHandling = TypeNameHandling.Objects
};
return MvcHtmlString.Create(JsonConvert.SerializeObject(obj, settings));
}
}
更改为:
public static class JsonHelpers
{
public static string ToJson<T>(this T obj)
{
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Formatting.Indented,
TypeNameHandling = TypeNameHandling.Objects
};
return JsonConvert.SerializeObject(obj, settings);
}
}
解决了这个问题。