2

我正在使用带有 ASP.NET MVC 的 Knockout 这是我的视图,它由 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操作方法,现在我想在xyz视图中显示用户名。那么我怎么能用 api 做到这一点,因为@Anders 说我要通过 Web APi 做到这一点。

提前致谢 。

4

2 回答 2

3

你不应该混合服务器端 MVC 和客户端 MVVM。将模型填充移至 WebAPI 控制器方法。

使用 jQuery.getJSON 或其他 Ajax 框架加载数据您还可以使用 ko.mapping 将服务器数据映射到 ViewModels

编辑:如果 oyu 想使用 @Mode.Name,ViewModel.js 中的代码必须移动到 cshtml 文件中,但请不要这样做。

沿线更新一些东西

[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));
});
于 2013-08-13T08:38:02.013 回答
0

尝试在 JS 上使用类似的东西:

function myModel(){
   var data = @(Html.Raw(Json.Encode(Model)));
   this.Name = ko.observable(data.Name);
}

然后你绑定你的视图模型:

ko.applyBindings(new myModel());
于 2013-08-13T08:38:07.940 回答