gpt4 book ai didi

javascript - 将 MVC 模型转换为 Knockout JS ViewModel

转载 作者:行者123 更新时间:2023-11-30 00:33:36 29 4
gpt4 key购买 nike

我正在尝试将我的 mvc 模型转换为此处的 knockout View 模型:

型号

public class MyModel
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
.
.
.
public List<MyList1> MyListOne{ get; set; }
public List<MyList2> MyListTwo{ get; set; }
}

Controller

public ActionResult Index()
{
MyModel myModel;

var myServiceObject = myServiceManager.GetMyModelByUser(user);

myModel = new MyModel
{
Id = myServiceObject.Id,
.
.
.
.
};

return View(myModel);
}

查看模型

var DynamicModelLoading = function (data) {
var self = this;

ko.mapping.fromJS(data, {}, self);

};

助手

public static string ToJson(this object obj)
{
JsonSerializerSettings serializerSettings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};

return JsonConvert.SerializeObject(obj, Formatting.None, serializerSettings);
}

查看

<script src="~/Scripts/jquery-2.1.1.min.js"></script>
<script src="~/Scripts/knockout-3.2.0.js"></script>
<script src="~/Scripts/knockout.mapping-latest.js"></script>
<script type="text/javascript">
var viewModel;

$(function () {
var viewModel = new DynamicModelLoading(@Html.Raw(Model.ToJson()));
ko.applyBindings(viewModel);
});
</script>

<div class="f_name" data-bind="text: FirstName"></div>
<div class="f_name" data-bind="text: LastName"></div>

ToJson() 返回数据。但是在绑定(bind)它时我没有收到任何错误,也没有数据。我在这里遗漏了一些东西,但不确定它是什么。


回答

这里是修复:

<div class="f_name" data-bind="text: firstName"></div>
<div class="f_name" data-bind="text: lastName"></div>

我期望属性名称与我的 mvc 模型相同,但 Json Serializer 默认情况下将首字母大写转换为小写。

最佳答案

问题一定与来自 @Html.Raw(Model.ToJson())) 的 JSON 结果有关

只是为了稍微尝试一下代码,我创建了这个 fiddle ,它似乎正确地映射了数据,并成功地将它绑定(bind)到 View :http://jsfiddle.net/4Lu8fdx2/

这是 JavaScript 代码:

var DynamicModelLoading = function (data) {
var self = this;

ko.mapping.fromJS(data, {}, self);
};

$(function () {
var viewModel = new DynamicModelLoading({"testProperty":"testValue"});

ko.applyBindings(viewModel);
});

这成功地将传递给“DynamicModelLoading()”的静态 JSON 绑定(bind)到 View 中的 HTML。这是 HTML:

<h4>Value For 'testProperty'</h4>
<span data-bind="text: testProperty"></span>

当您在调用“applyBindings()”之前将您的 viewModel 记录到控制台时会发生什么?它是否包含配置为可观察对象(函数)的原始 JSON 对象的所有属性?当我记录 viewModel 时,这是我得到的:

DynamicModelLoading {testProperty: function, __ko_mapping__: Object}

如果映射成功,您应该会得到类似的结果,但包含对象的所有属性。

关于javascript - 将 MVC 模型转换为 Knockout JS ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28222785/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com