如何在knockout viewmodel js中使用mvc4模型值

时间:2013-08-13 08:08:09

标签: asp.net-mvc asp.net-mvc-4 knockout.js knockout-2.0 knockout-mvc

我在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做到的。

提前致谢。

2 个答案:

答案 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());