Asp.net mvc 2 knockout.js将表单加载到viewModel中

Asp.net mvc 2 knockout.js将表单加载到viewModel中,asp.net-mvc-2,data-binding,knockout.js,Asp.net Mvc 2,Data Binding,Knockout.js,我目前正在成功地使用knockout.js处理应用程序中的所有数据绑定。但是,在每次页面加载时,在我的document.ready中,我都会进行如下初始asnychronous数据加载: $(document).ready() { getData() }); 但是,是否可以将数据加载到表单中(使用ASP.NET MVC2),然后根据数据绑定标记将数据反向加载到视图模型中 我觉得这样不行,我只是想确认我没有做任何不恰当的事情 值绑定最初会将元素的值设置为视图模型中的值,因此不会。但是,您可能

我目前正在成功地使用knockout.js处理应用程序中的所有数据绑定。但是,在每次页面加载时,在我的document.ready中,我都会进行如下初始asnychronous数据加载:

$(document).ready() {
  getData()
});
但是,是否可以将数据加载到表单中(使用ASP.NET MVC2),然后根据数据绑定标记将数据反向加载到视图模型中


我觉得这样不行,我只是想确认我没有做任何不恰当的事情

值绑定最初会将元素的值设置为视图模型中的值,因此不会。但是,您可能会将值绑定的代码复制到自己的处理程序中,该处理程序最初会根据控件上的值设置模型值。下载敲除,并在第2182行上查找
ko.bindingHandlers['value']={
。复制此绑定处理程序声明并将'value'更改为其他内容,然后在init末尾添加对valueUpdateHandler()的调用:

ko.bindingHandlers['myvalue'] = {
    'init': function (element, valueAccessor, allBindingsAccessor) {
        // skipping code
        valueUpdateHandler(); // update model with control values
    },
    'update': function (element, valueAccessor) {
        // skipping code
    }
};
现在,当您使用myvalue绑定时,您的模型将在初始绑定时使用控件值进行更新:

<input type="text" data-bind="myvalue: name"></input>
如果您不想使用AJAX,可以通过将模型序列化为JSON(razor语法)将值转换为javascript:


var model=@(新的HtmlString(新的System.Web.Script.Serialization.JavaScriptSerializer().Serialize(model));

值绑定最初会将元素的值设置为视图模型中的值,因此不会。但是,您可以将值绑定的代码复制到自己的处理程序中,该处理程序最初会从控件上的值设置模型值。下载敲除的代码,然后查找
ko.bindingHandlers['value']={
第2182行。复制此绑定处理程序声明并将“value”更改为其他内容,然后在init末尾添加对valueUpdateHandler()的调用:

ko.bindingHandlers['myvalue'] = {
    'init': function (element, valueAccessor, allBindingsAccessor) {
        // skipping code
        valueUpdateHandler(); // update model with control values
    },
    'update': function (element, valueAccessor) {
        // skipping code
    }
};
现在,当您使用myvalue绑定时,您的模型将在初始绑定时使用控件值进行更新:

<input type="text" data-bind="myvalue: name"></input>
如果您不想使用AJAX,可以通过将模型序列化为JSON(razor语法)将值转换为javascript:


var model=@(新的HtmlString(新的System.Web.Script.Serialization.JavaScriptSerializer().Serialize(model));

这里有一个工作示例(不是我的),有几种不同的方法来实现这一点:


这里有一个工作示例(不是我的),有几种不同的方法来实现这一点:


最后一部分是我想要的确切答案。这非常好。当然,不得不将其包含在我的direct aspx文件中,然后从外部JS文件引用它有点遗憾,但是,这正是我想要的。谢谢!最后一部分是我想要的确切答案。这非常好。当然se将它包含在我的direct aspx文件中,然后从外部JS文件引用它,这有点遗憾,但是,这正是我想要的。谢谢!