如何将我的挖空代码移出我的视图,并且仍然能够映射视图模型
本文关键字:我的 视图 模型 映射 代码 移出 | 更新日期: 2023-09-27 18:19:44
我目前正在尝试将我的MVC视图模型映射到挖空视图模型中。我正在使用用于淘汰的映射扩展来自动执行此操作。
当 javascript 在视图中时,我可以让它工作,因为我可以直接使用剃刀代码引用视图模型,就像这样......
var model = @Html.Raw(Json.Encode(Model)) indexViewModel.serverViewModel = ko.mapping.fromJS(model);
但是,当javascript位于单独的文件中时,我不确定该怎么做。
我决定将 MVC 视图模型放入一个隐藏变量中(不确定我是否打算这样做(。
@Html.Hidden("Model", @Html.Raw(Json.Encode(Model)))
然后像这样在我的JS中引用它
var model = $('#Model').val();
indexViewModel.serverViewModel = ko.mapping.fromJS(model);
现在的问题是它似乎没有映射。
我已经查看了JS-in-View和单独的JS文件版本中的模型内容,它们都输出
{"companies":[{"Key":1,"Value":"BHP "}]}
这就是我追求的 JSON。
只是由于某种原因,在单独的JS文件中,ko.mapping.fromJS(model(返回了一个字符串,其中JS-in-View版本将其作为可观察量((的层次结构返回。
在你的第一个 samaple:
var model = @Html.Raw(Json.Encode(Model))
indexViewModel.serverViewModel = ko.mapping.fromJS(model);
model
变量包含一个 JS 对象,可以用 ko.mapping.fromJS(model)
映射。
但是,在您的第二个示例中:
var model = $('#Model').val();
model
现在包含一个 JSON 字符串,需要使用ko.mapping.fromJSON
方法映射差异:
因此,以下内容应该有效:
var model = $('#Model').val();
indexViewModel.serverViewModel = ko.mapping.fromJSON(model);
另请参阅文档使用 JSON 字符串部分。
此行
var model = $('#Model').val();
返回一个string
而ko.mapping.fromJS
需要 JavaScript 对象 ( "fromJS"
(。
尝试:
var model = JSON.parse($('#Model').val());