2015-09-30 28 views
2

我試圖用Razor設置Knockout-bound函數的參數。我試過......如何使用Razor和Knockout進行數據綁定

<a href="#" data-bind="click: function() { return myFunc(@Type.SomeType.ToString()); }"> 
    Click Me 
</a> 

和..

<a href="#" data-bind="click: function() { return myFunc(@Html.Raw(Type.SomeType.ToString())); }"> 
    Click Me 
</a> 

和..

<a href="#" data-bind="click: function() { return myFunc('@Html.Raw(Type.SomeType.ToString())'); }"> 
    Click Me 
</a> 

和..

<a href="#" data-bind="click: function() { return myFunc('@(Html.Raw(Type.SomeType.ToString()))'); }"> 
    Click Me 
</a> 

是否有一個正確的方式做這個?

(背景:這是一個自舉下拉使用)

+0

第3段應工作。什麼是錯誤? – haim770

+0

每個撇號上未終止的字符串常量。它沒有連接兩個撇號。如果我交換撇號和引號,則會出現同樣的錯誤。 – tarrball

+0

你有沒有試過'myFunc('@(Html.Raw(Type.SomeType.ToString()))')'? – haim770

回答

0

你可以嘗試圍繞data-bind屬性用單引號('),並通過使用Json.Encode參數。

完整的示例:

@{ 
    // A string with a lot of special characters 
    string myStr = "abc\"\\/'#{}@.:xyz"; 
} 

<span data-bind='click: function() { myFunc(@Json.Encode(myStr)); }'> 
    Click Me 
</span> 

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-debug.js"></script> 
<script> 
    ko.applyBindings({ 
     myFunc: function (myParam) { 
      console.log(myParam); 
     } 
    }); 
</script> 

你的情況,那就是:

<a href="#" data-bind='click: function() { return myFunc(@Json.Encode(Type.SomeType.ToString())); }'> 
    Click Me 
</a> 
相關問題