我在ASP.NET MVC中使用Knockout这是我的View,它由MVC控制器填充
HTML
<html>
<input type="text" data-bind="value:Name" />
<script src="/Scripts/ViewModel.js"></script>
</html>
控制器
public actionresult xyz(){
var myModel = new FiestModel();
myModel.Name = "James";
return view(myModel);
}
ViewModel.Js
function mymode(){
var self = this ;
self.Name = ko.observable('@Model.Name');
}
完成所有这些操作后,当我的页面呈现时,我的输入没有指定值James
。
更新
我告诉大家整个场景,在我的应用程序中,用户点击signup with facebook
按钮,Facebook将用户返回到我的xyz
操作方法,现在我想在{{ 1}}查看。那么我怎么能用api来做这件事,因为@Anders说我是通过Web APi做到的。
提前致谢。
答案 0 :(得分:3)
你不应该混合服务器端MVC和客户端MVVM。 将模型填充移动到WebAPI控制器方法。
使用jQuery.getJSON或其他Ajax框架加载数据 您还可以使用ko.mapping将服务器数据映射到ViewModels
编辑:如果oyu想要使用,则必须将ViewModel.js中的代码移动到cshtml文件中 @ Mode.Name,但请不要这样做。
<强>更新强> 一些事情
[HttpGet]
public FiestModel xyz() {
return new FiestModel("James");
}
使用映射插件
ViewModel = function(data) {
ko.mapping.fromJS(data, {}, this);
};
$.getJSON("api/myController/xyz", null, function(data) {
ko.applyBindings(new ViewModel(data));
});
答案 1 :(得分:0)
尝试使用JS上的内容:
function myModel(){
var data = @(Html.Raw(Json.Encode(Model)));
this.Name = ko.observable(data.Name);
}
然后绑定视图模型:
ko.applyBindings(new myModel());