我正在尝试将我的 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/