我有一个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
}
});
};
答案 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