如何将我的挖空代码移出我的视图,并且仍然能够映射视图模型

本文关键字:我的 视图 模型 映射 代码 移出 | 更新日期: 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();  

返回一个stringko.mapping.fromJS需要 JavaScript 对象 ( "fromJS" (。

尝试:

var model = JSON.parse($('#Model').val());