在观看knockoutjs演讲之后,我刚刚开始关注MIX 11,看起来很有希望。
我可以理解如何将模型作为json传递回控制器并更新/保存模型,但是如何将模型传递给我的视图并使其可观察?
例如,如果我有以下类:
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}
我可以使用JsonResult从我的控制器作为json传递它,所以我发送类似于我的视图:
{
firstName : "Bob",
lastName : "Jones"
};
现在,如何使属性可观察并在我的代码中将其设为viewModel?
答案 0 :(得分:8)
$.ajax({
url: 'Home/GetUserData',
type: 'post',
success: function (data) {
viewModel = ko.mapping.fromJS(data);
viewModel.save = function () { sendToServer(); };
ko.applyBindings(viewModel);
}
});
您还需要使用映射插件。
http://knockoutjs.com/documentation/plugins-mapping.html
注意ko.mapping.fromJS(数据);这是从mvc端点获取模型并将其准备为可观察的。
答案 1 :(得分:5)
这是一篇帮助我的文章:http://www.codeproject.com/Articles/332406/Client-side-Model-binding-with-ASP-NET-MVC-3-and-K
它显示了一种绑定viewmodel的方法,没有ajax调用,也没有在控制器端进行额外的转换。
答案 2 :(得分:1)
我没有使用ko.mapping插件。我认为映射插件是双向的(这不是你的情况)。
我已经宣布了一个Html Helper>
public static string ToJson(this object obj)
{
var serializer = new JavaScriptSerializer();
return serializer.Serialize(obj);
}
将我的服务器端模块序列化为客户端大小JSON,并在客户端声明它。
答案 3 :(得分:0)
接受的答案使用JQuery。这非常有效,但不是必需的。参见:
http://blog.stevensanderson.com/2010/07/12/editing-a-variable-length-list-knockout-style/