我正在尝试将对象结构传递给我的html,以绑定到href。问题变成文件路径(.exe的路径)因为'而不被理解。
以下示例:
var categories = ko.mapping.fromJSON('[{"Applications":[{"Documentation":null,"ApplicationId":2,"Name":"PSSE","Description":"Model software","LocalExePath":"aecies://runApp?C:\Program Files (x86)\MyApp\app.exe"}],"Name":"foobar"}]');
很抱歉,如果我弄乱了一些语法,我正在拿一个更大的json对象并压缩它作为一个例子,可能错过了某个地方的括号。无论如何,在上面的例子中,ExePath的类别中出现的是删除了' \ n的字符串。如果我强迫它是' \\'对于每一个',它都说不明白标识符P(明显在C:\ Program中断)。
马丁的回答似乎是我想要的,但我在问题中提出的是我需要什么来自JSON。问题是我的代码实际上并不是什么样子。这就是来自@ Html.Raw()的吐出来的东西。下面我添加了我的实际代码。问题是我无法添加另一个替换所有\与四个\,因为它添加\到每个JSON标题。 (最终看起来像[{\\\\" Applications \\\\")var categories = ko.mapping.fromJSON(
'@Html.Raw(JsonConvert.SerializeObject(Model.Categories,
Formatting.None,
new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml, ReferenceLoopHandling = ReferenceLoopHandling.Ignore}
).Replace("\\u0022", "\\\"").Replace("\"", "\\\""))');
我使用的两个可能的修复是控制器中的string.replace来格式化那里的数据。或者在我的数据库记录中为每个斜杠添加两个斜杠。在通过序列化和Html.Raw之后,如果它在数据库中有2,则最终得到正确的4个量。是否有第三个选项允许我在数据库中存储实际的路径字符串(没有额外的斜杠,' C:\ HelloDir \'),但是在我的Razor代码中添加一行来替换斜杠我关心。
编辑:stackoverflow不喜欢我做双斜杠,这是完美的,因为我的大部分问题都在于映射。
Edit2:问题还有更多内容
答案 0 :(得分:0)
您实际上需要四个反斜杠,因为您正在进行2层解码:
所以你想要:
var categories = ko.mapping.fromJSON('[{"Applications": [{"Documentation":null,"ApplicationId":2,"Name":"PSSE","Description":"Model software","LocalExePath":"aecies://runApp?C:\\\\Program Files (x86)\\\\MyApp\\\\app.exe"}],"Name":"foobar"}]');
你可以看到更多的例子 http://jsfiddle.net/gjb4h0jy/2/
答案 1 :(得分:0)
对于那些寻找斜线问题解决方案的人来说,我已经清楚地知道EscapeHtml条目正在酝酿之中。如果我删除它然后处理我想要使用Replace语句转义的特定特殊字符,一切都很完美。
var categories = ko.mapping.fromJSON(
'@Html.Raw(JsonConvert.SerializeObject(Model.Categories,
Formatting.None,
new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore}
).Replace(@"\r\n", "").Replace(@"'", @"\'").Replace(@"/", @"\/").Replace(@"\\", @"\\\\").Replace("\"", "\\\""))');