说我正在使用
@Html.TetboxFor(m => m.FirstName, new { data_bind= "value:first_name" })
我从我的MVC viewmodel填充,我想将该值传递给我的knockoutJs视图模型 . 我已经看到了从我的viewmodel创建一个javascript对象的建议 . 通过告诉viewmodel,我已经能够成功获得 Value
self.first_name = ko.observable($("#FirstName").val())
我尝试使用'text'绑定,它从mvc viewmodel呈现我的数据,但不会在knockout视图模型中返回数据,'value'绑定会清除我的Html帮助程序,但会将数据返回到knockout视图模型 . 我也尝试使用'textinput'绑定 . 有没有比我正在使用的更好的方法,或者是直接从服务器填充淘汰视图模型的主要方式?谢谢
1 回答
我知道我会被标记为给你一个替代答案但是没关系,因为分享一种解决问题的不同方式是值得的,这更简单,更强大 .
如果你不介意一个建议,远离ASP.NET MVC Razor模板,它并不强大,它将你的后端紧密耦合到你的前端,与ASP.NET Web Forms没有太大的不同 .
这里作为KnockoutJs与ASP.NET MVC的强大功能的例子,但没有用于将Model数据绑定到View元素的Razor,完全使用knockoutjs . 一个关键的问题是C#Model是使用knockout.mapping.js在KnockoutJs中动态构建的 . 因此,当您向C#模型添加新属性时,它将自动在您的Knockout ViewModel中可用 .
Here is a snippet of a .cshtml View using no Razor syntax for the form/input model binding:
}
And here is part of knockout.mapping.js (~/bundles/knockout/build/start):
And here is Scripts/knockout.mapping.updateData.js, I do not think you will need it to get started with this pattern but I included just in case: