JSON.ENCODE 将带有空格的变量拆分为多个变量

Posted

技术标签:

【中文标题】JSON.ENCODE 将带有空格的变量拆分为多个变量【英文标题】:JSON.ENCODE is splitting variable with space into multiple variables 【发布时间】:2017-05-01 15:25:03 【问题描述】:

我有一个 asp.net mvc4 应用程序,我正在视图内使用 JSON.Encode 序列化一个 c# 对象(使用 Razor)。发生的情况是,其中有空格的部分,JSON.ENCODE 将尝试将其转换为每个空格的多个变量。

例子。 Part.Name = "A B C" JSON 编码将产生:"Name":"A" B="" C=""

如何防止这种情况发生?

使用剃刀, 代码:

             foreach (Transaction transaction in Model)
             
                <tr value= @html.Raw(Json.Encode(transaction)) onclick="commitTRValuesToForm(this)">
                <td>@transactionLite.system</td>
                <td>@FormattingUtility.DecimalTo12HR(transactionLite.Time)</td>
                <td>@transactionLite.Intials</td>

             

ajax 调用:

function commitTRValuesToForm(rowInstance)

    var jsonString = $(rowInstance).attr('value');

             var src = '@Url.Action("JsonResultForm", "Home", new  area = "Part" )'
             $.ajax(
                 type: "POST",
                 url: src,
                 dataType: "json",
                 data: jsonString,
                 contentType: "application/json; charset=utf-8",
                 success: function (data) 
                     //do stuff
                 
             );
;

【问题讨论】:

你做错了。向我们展示您的代码。 你需要在那个字符串两边加上双引号。 你想在这里做什么? value 不是 &lt;tr&gt; 元素的有效 html 属性。而且无论如何都需要引用 我正在尝试存储编码对象,因此当在该行上单击表格时,我可以将编码值与 ajax 一起传递给服务器端代码。我将使用 ajax 发布我的函数。当部件名称中没有空格时,这可以正常工作。 根本没有编辑任何内容,所以为什么要在视图中生成所有额外的 html,然后将其全部原封不动地发送回去。只需包含 transaction 对象的 ID - &lt;tr data-id="@transaction.ID"&gt;...$('tr').click(function() $.post('@Url.Action(...)', id: $(this).data('id'), function(data) // do stuff); ); 即可回发 ID 【参考方案1】:

使用斯蒂芬的建议,

  <tr value= '@Html.Raw(Json.Encode(transaction))' onclick="commitTRValuesToForm(this)">

代替:

  <tr value= @Html.Raw(Json.Encode(transaction)) onclick="commitTRValuesToForm(this)">

解决了 JSON.ENCODE 给我的问题。

更新: 此外,有人说 value 是非法属性,但从未提及替代方案;后来我偶然发现它是:数据值。使用数据值更好,因为它不是非法的,它也会带来类型。所以如果我想像这样传递一个数组,

<tr  value='["val1","val2"]' onclick="addToSelectedList(this)">

检索时,该值将是一个字符串值,如“[val1,val2]”

现在,

<tr  data-value='["val1","val2"]' onclick="addToSelectedList(this)">

将值作为数组返回,包含 2 个元素 [0]=val1 和 [1]=val2

【讨论】:

这与JSON.Encode无关;您正在生成非法 HTML。 我更精通后端代码。我还在学习前端的东西。究竟发生了什么?为什么它只适用于单而不适用于双,为什么它在没有任何引号的情况下工作正常(没有抛出错误)但多个空格却让事情出错了? 将“查看源代码”(显示您的服务器发送的内容)与 DOM 检查器(显示浏览器如何解析它)进行比较。 使用双引号和单引号的经验法则是什么,因为在 @html.Raw(Json.Encode()) 周围使用双引号会导致与不使用任何单引号相同的问题引号工作正常。 你应该使用双引号,但是你应该对你的字符串进行 HTML 转义,这样它们里面就没有双引号(这可以防止这个错误和 XSS 漏洞)。不要打电话给Html.Raw()

以上是关于JSON.ENCODE 将带有空格的变量拆分为多个变量的主要内容,如果未能解决你的问题,请参考以下文章

如何基于多个空格字符将文本文件拆分为 2 列作为 scala spark 的分隔符

如何在 bash shell 中将一个字符串拆分为多个字符串,至少用一个空格分隔?

如何将每个带有一组子命令的 Click 命令拆分为多个文件?

Python 将变量输出拆分为多个变量

想要一种使用 PowerShell 将不同字符串拆分为多个部分的通用方法

如何将连续变量拆分为等长(定义数量)的区间并仅在 R 中列出带有切点的区间?