帮助asp.net mvc和jquery

时间:2011-03-03 15:15:57

标签: jquery asp.net-mvc

$("#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>

我怎样才能解决这个问题?将这一切都放在一条线上是非常糟糕的。

请帮忙。

2 个答案:

答案 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=\&quot;text\&quot; name=\&quot;bar\&quot; /\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>