View 中的 Html.Raw 和引号

Html.Raw and quotes in View

提问人:alex_kart 提问时间:10/31/2023 最后编辑:Jackdawalex_kart 更新时间:11/6/2023 访问量:42

问:

我想将对象作为参数传递给 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>

页面呈现的区别:

enter image description here

我不明白为什么会这样。在这种情况下,也许存在一些更好的方法来将对象作为函数参数传递?

此问题最近几天出现。在此之前它工作正常,并且没有对组件进行任何更改(但我之前没有检查生成的html,也许浏览器之前可以正确处理这两种格式)

C# ASP.NET-MVC-4 剃刀

评论


答:

0赞 BenderBoy 11/6/2023 #1

您正在尝试将字符串文字作为函数参数传递,因此您需要将文本括在双引号或单引号中(您缺少此部分)。由于所有这些都发生在 HTML 属性值中,因此此值也需要放在引号中。您要查找的语法如下,其中 “ 和 ' 可以互换:

<a onclick="my_cool_function('@Html.Raw(Json.Encode(model))')"></a>

Tbh,我不确定你甚至需要这里。Html.Raw()

此外,由于所有嵌套引号,如果引号出现在 Json 语法中,这将不起作用,因此无法对字符串值或属性名称进行编码。如果你只需要带有数字的 Json 数组,它应该没问题。

否则,您可能会将内容拆分为两个属性:

<a data-model='@Json.Encode(model)' onclick="my_cool_function(this.dataset.model)"></a>

您仍然需要单引号,因为 Json 可能包含双引号。