javascript - Knockout.mapping.fromJSON 因 ' 字符而失败

标签 javascript c# mvvm knockout.js

我正在尝试将我的 View 模型绑定(bind)到 Knockout,因为我需要执行一些客户端操作。由于 ' 字符,我遇到了问题。

我的模型中有一些 SelectListItem 对象,这些对象如下所示:

{
    "Disabled": false,
    "Selected": false,
    "Text": "Côte d'Ivoire",
    "Value": 59
}

请注意 Text 属性中的 ' 字符:"Côte d'Ivoire"。 这个 Angular 色是一切的问题,因为这就是我将 View 模型转换为 ko View 模型的方式:

@{
    var serializerSettings = new Newtonsoft.Json.JsonSerializerSettings();
    serializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
    var jsonData = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model, serializerSettings));
}

@using(Html.BeginScripts())
{
    @Scripts.Render("~/bundles/knockout")

    <script type="text/javascript">

        var vm = ko.mapping.fromJSON('@Html.Raw(jsonData)')

    </script>

}

请注意我是如何将 @Html.Raw(jsonData) 包装到 ' 中的。我想这就是问题所在,我只是不确定如何解决这个问题。

更新

这是返回此数据的 Controller 方法:

public ActionResult Solution()
{
    using(var db = new DatabaseContext())
    {
        var viewModel = new DetailsViewModel();

        viewModel.Countries = db.Country.ToList().Select(x => new SelectListItem{
            Value = "" + x.CountryId,
            Text = x.Name
        });

        return View(viewModel);
    }
}

最佳答案

这里的问题是这一行:

var vm = ko.mapping.fromJSON('@Html.Raw(jsonData)')

特别是您获取 jsonData 并将其未转义地填充到 JavaScript 字符串中的部分,本质上以:

var vm = ko.mapping.fromJSON('{"Text": "Côte d'Ivoire"}')

那个单引号需要被转义,否则你会破坏整个字符串。您可以修复此服务器端并转义字符串,也可以使用 different mapping method, fromJS , 而不是用单引号将您的 JSON 字符串括起来:

var vm = ko.mapping.fromJS(@Html.Raw(jsonData))

关于javascript - Knockout.mapping.fromJSON 因 ' 字符而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37805838/

相关文章:

javascript - 当变量超过某个值时更改背景

javascript - Angular 中使用否定进行内联过滤

c# - 如何通过反射从引用的程序集中获取类型

android - 如何在 Activity 之外使用 sharedPreferences?

c# - 来自SQL数据库的DateTime,其值为null

javascript - 多个表单的 jquery 验证之前的 ajax 表单提交

c# - C# 中的嵌套正则表达式替换

c# - Monostate 模式在哪些情况下建模?

c# - 每个类对象显示不同的用户控件

javascript - 用于商店的 Ember.js 外部 json