【问题标题】:Knockout.mapping.fromJSON fails because of ' characters由于 ' 字符,Knockout.mapping.fromJSON 失败
【发布时间】:2016-10-14 19:43:02
【问题描述】:

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

我的模型中有一些SelectListItem 的对象,这些对象看起来像这样:

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

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

@{
    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) 包裹在' 中的。我想这就是问题所在,我只是不确定如何解决这个问题。

更新

这是返回此数据的控制器方法:

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

【问题讨论】:

    标签: javascript c# mvvm knockout.js


    【解决方案1】:

    这里的问题是这一行:

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

    【讨论】:

      猜你喜欢
      • 2013-06-17
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多