2016-12-15 15 views
0

我有一个asp.net mvc4应用程序,我在视图中使用JSON.Encode序列化c#对象(使用Razor)。会发生什么情况是,在其中有空间的零件,JSON.ENCODE将尝试将其转换为每个空间的多个变量。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 
       } 
      }); 
}; 
+2

您正在做的事情完全错误。告诉我们你的代码。 – SLaks

+0

你需要在该字符串周围加双引号。 – DavidG

+0

你在这里试图做什么? 'value'不是''元素的有效html属性。它需要在任何情况下引用 –

回答

1

使用斯蒂芬建议,

<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

+2

这与'JSON.Encode无关';你正在生成非法的HTML – SLaks

+0

我对后端代码更加熟练,我仍然在学习前端的东西,到底发生了什么?为什么它只能使用单一的而不是两个,为什么它没有任何引号(没有错误抛出)但多个空格使事情出错? – eaglei22

+0

比较“查看源代码”(显示你的服务器发送的内容)到DOM检查器(显示浏览器如何解析它) – SLaks