如何使用Razor和Knockout进行数据绑定

时间:2015-09-30 15:56:24

标签: razor knockout.js data-binding

我试图用Razor设置一个Knockout-bound函数的参数。我试过了......

<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>

有没有正确的方法呢?

(背景:这用于引导程序下拉列表)

1 个答案:

答案 0 :(得分: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>