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

时间:2016-12-15 22:07:19

标签: c# json asp.net-mvc-4 razor

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

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

我该如何防止这种情况?

使用Razor, 代码:

             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
                 }
             });
};

1 个答案:

答案 0 :(得分:2)

使用斯蒂芬的建议,

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

而不是:

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

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

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

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

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

现在改为

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

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