如何将模型传递给视图?

时间:2011-04-21 09:09:23

标签: asp.net-mvc asp.net-mvc-3 knockout.js

在观看knockoutjs演讲之后,我刚刚开始关注MIX 11,看起来很有希望。

我可以理解如何将模型作为json传递回控制器并更新/保存模型,但是如何将模型传递给我的视图并使其可观察?

例如,如果我有以下类:

public class Person {
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

我可以使用JsonResult从我的控制器作为json传递它,所以我发送类似于我的视图:

{ 
    firstName : "Bob",
    lastName : "Jones"
};

现在,如何使属性可观察并在我的代码中将其设为viewModel?

4 个答案:

答案 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/