$("#add_activity").click(function () {
$('#activities').append('@Html.Raw(Html.Partial("MyPartial").ToHtmlString())');
});
我有一些代码似乎工作得很好,如果部分是这样的:
<tr><td>Foo</td><td><input type="text" name="bar" /></td></tr>
但如果部分是
,则无效<tr>
<td>
Foo
</td>
<td>
<input type="text" name="bar" />
</td>
</tr>
我怎样才能解决这个问题?将这一切都放在一条线上是非常糟糕的。
请帮忙。
答案 0 :(得分:3)
这是正常的。如果您查看生成页面的源代码,您将看到:
$('#activities').append('
<tr>
<td>
Foo
</td>
<td>
<input type="text" name="bar" />
</td>
</tr>
');
显然距离可以被认为是有效的javascript的东西很远。
您可以使用JavaScriptStringEncode方法,如下所示:
$("#add_activity").click(function () {
$('#activities').append('@HttpUtility.JavaScriptStringEncode(Html.Partial("MyPartial").ToHtmlString())');
});
将负责正确编码HTML字符串,您将得到有效的javascript:
$("#add_activity").click(function () {
$('#activities').append('\u003ctr\u003e\r\n \u003ctd\u003e\r\n Foo\r\n \u003c/td\u003e\r\n \u003ctd\u003e\r\n \u003cinput type=\"text\" name=\"bar\" /\u003e\r\n \u003c/td\u003e\r\n\u003c/tr\u003e');
});
产生所需的结果。
答案 1 :(得分:0)
这适用于MVC3:
@{
Layout = null;
var s = HttpUtility.JavaScriptStringEncode(Html.Partial("Banner").ToHtmlString().ToString());
}
<iframe id="banner" src="about:blank" frameborder="0"></iframe>
<script type="text/javascript">
var doc = document.getElementById('banner').contentWindow.document;
doc.open();
doc.write("@Html.Raw(s)");
doc.close();
</script>