撇号在onclick - razor语法中逃脱

时间:2014-03-11 20:44:46

标签: javascript asp.net-mvc razor escaping

所以,我有这个:

button value="Press me" name="btnLoad" onclick="calljsfunc(@Model.variable)"></button>

我在@ Model.variable变量中的数据恰好有一个撇号。让我们说这些数据是&#34;鲍勃的地方&#34;。它被编码为&#34; Bob \&amp;#39 \; s Place&#34;。这导致javascript问题,因为它看到我在右括号之前有一个分号。它给了我错误&#34;预期&#39;)&#39;&#34;。

我已经浏览了整个Interwebs,并且已经看到了大量的解决方案,如果我向页面发送文字,如何解决这个问题。但我无法找到任何能说明如何处理数据中的撇号(或任何其他特殊字符)的内容!

有人可以帮忙吗?!

3 个答案:

答案 0 :(得分:0)

看一下encodeURIcomponent()函数。还有decodeURIcomponent()用于还原。 您也可以将数据编码为json。

答案 1 :(得分:0)

我无法弄清楚如何逃避特殊角色。我最终使用正则表达式来查找和抑制服务器端代码中字段中的任何特殊字符。 :(

答案 2 :(得分:0)

首先,我建议通过data-属性提供参数,而不是内联。这相对简单:

<button value="Press me" name="btnLoad" data-argument="@Html.AttributeEncode(Model.variable)" onclick="calljsfunc()"></button>

您必须更改calljsfunc才能查看data-argument属性,而不是函数的参数。该值不会被编码,因此您将在那里安全。

var arg = this.getAttribute('data-argument'); // (for old browsers) OR
var arg = this.dataset.argument; // Modern browsers

但是,如果你想这样做,假设calljsfunc需要一个字符串,你必须做这样的事情:

<button value="Press me" name="btnLoad" onclick="calljsfunc('@Model.variable.Replace("'", "\\'")')"></button>

注意变量之后的刻度线;这是必要的,因为你传递一个字符串,我相信。

相关问题