如何在使用ASP.NET MVC 3“Razor”视图引擎的KnockoutJS中启用数据绑定?

问题描述:

我试图使用ASP MVC 3的“Razor”视图引擎来实现this Knockout example如何在使用ASP.NET MVC 3“Razor”视图引擎的KnockoutJS中启用数据绑定?

第一个主题涉及使用标准ASP视图引擎的简单数据绑定C#数组。我试图用“剃刀”的样本为例,该行:

<script type="text/javascript"> 
    var initialData = <%= new JavaScriptSerializer().Serialize(Model) %>; 
</script> 

导致一个空的变量initialData

我也试过这样:

@{ 
    string data = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model); 
} 

然后指定initialData这样的:

var initialData = @Html.Raw(data); 

这种填充initialData与数据集,但结合不起作用。

我只是想为了显示的想法计数数据绑定这一套,如示例:

<p>You have asked for <span data-bind="text: gifts().length">&nbsp;</span> gift(s)</p> 

为什么没有数据在这种情况下结合的工作?

在MVC3最简单的方法就是做:

var initialData = @Html.Raw(Json.Encode(Model)); 
+0

谢谢@RP,但它对我不起作用。我有这样的:

你有要求  礼物。

绑定不会显示给我。 – retrodrone 2011-05-03 20:22:38
+0

你可以在浏览器中查看“查看源代码”,看看initialData在标记中的外观如何?我有一个与此代码一起使用的礼物编辑器示例副本。你改变了别的吗?谢谢。 – 2011-05-03 20:45:08

+0

没什么特别的。 initialData只是一个常规的JSON数组,填充了正确的数据。我可以抛出一个正确计数的警告框,但ko数据绑定不起作用。这是非常令人沮丧的,因为现场示例非常棒。 – retrodrone 2011-05-03 20:55:54

我碰到了同样的问题,并发现这是我自己的愚蠢造成的问题(这经常是)。我忘了要等到DOM加载调用ko.applyBindings(viewModel) - 单纯用:

$(document).ready(function() { ko.applyBindings(viewModel); }); 

所以整个脚本

<script type="text/javascript"> 
var initialData = @Html.Raw(new JavaScriptSerializer().Serialize(Model)); 
var viewModel = { 
    gifts: ko.observableArray(initialData) 
}; 

$(document).ready(function() { ko.applyBindings(viewModel); }); 
</script> 

这曾与淘汰赛1.2.1.js和jQuery-1.5。 1.js

+0

你刚刚帮我解决了一个问题,在过去的两天里,我一直在抨击我的头。谢谢。 – dotnetN00b 2012-07-27 20:05:53