2011-05-03 20 views
16

我試圖使用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> 

爲什麼沒有數據在這種情況下結合的工作?

回答

24

在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

11

我碰到了同樣的問題,並發現這是我自己的愚蠢造成的問題(這經常是)。我忘了要等到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

相關問題