我想将对象作为参数传递给View中的
onclick
事件,所以我编写了这样的代码
<a href="#" onclick="my_cool_function(@Html.Raw(Json.Encode(model)))">cool action</a>
并且渲染的 HTML 页面的 html 代码不正确
但是当将双引号更改为单引号时问题就消失了:
<a href="#" onclick='my_cool_function(@Html.Raw(Json.Encode(model)))'>cool action</a>
页面渲染的差异:
您正在尝试传递字符串文字作为函数参数,因此您需要将文本用双引号或单引号引起来(您缺少这部分)。由于所有这些都发生在 HTML 属性值内,因此该值也需要用引号引起来。您正在寻找的语法如下,其中“和”可以交换:
<a onclick="my_cool_function('@Html.Raw(Json.Encode(model))')"></a>
说实话,我不确定你是否需要
Html.Raw()
这里。
此外,由于所有嵌套的引号,如果引号出现在 Json 语法中,这将不起作用,因此您无法对字符串值或属性名称进行编码。如果你只需要包含数字的 Json 数组,应该没问题。
否则,您可能会将事物分成两个属性:
<a data-model='@Json.Encode(model)' onclick="my_cool_function(this.dataset.model)"></a>
您仍然需要单引号,因为 Json 可能包含双引号。