【问题标题】:knockout js pass view param淘汰赛 js 传递视图参数
【发布时间】:2017-11-03 03:05:14
【问题描述】:

我的 mvc 视图中有一个参数为

@{
   var myparam = false;
}

我的按钮在同一个视图中:

 <input type="button" id="myButton" value="Click" class="btn btn-primary" 
  data-bind='enable: selectvalue() != ""' />

在我的按钮的数据绑定中,我还想检查 myparam。如下所示:

data-bind='enable: filterCategory() != "" && !myparam'

我该怎么做?

谢谢

更新如下:

如果我的参数如下:

@{
  var myparam = false;
}

还有我的 JS:

<script>
    var myData= @Html.Raw(Json.Serialize(Model));
    myData.myParameter= "@myparam ";
</script>

我的淘汰赛:

  (function () {
    var viewModel = function (data) {
         var viemod= this;
         viemod.myParam= vmData.myParam
 }
}

如果我在上面的淘汰赛 js 中使用这个 myData,它会返回“False”(字符串) 而它应该是假的(布尔值)

【问题讨论】:

    标签: asp.net-mvc razor knockout.js asp.net-core


    【解决方案1】:

    这行不通,因为 Razor 运行服务器端。 myparam 是一个 C# 局部变量。因此,您不能将它与运行客户端的淘汰赛绑定一起使用。

    您可以创建一个 javascript 变量并像这样分配值:

    <script>
        var myparam = @Json.Encode(myparam);
    </script>
    

    如果您不想污染全局范围,请将 myparam 属性添加到您的 viewModel。

    var yourViewModel = function() {
        var self = this;
        self.myparam = @Json.Encode(myparam);
        self.filterCategory = ko.observable('');
    }
    

    更新后:

    如前所述,应该是

    myData.myparam = @Json.Encode(myparam);
    

    但由于您要使用.Serialize() 整个模型,您可以将myparam 分配给控制器本身的属性。

    【讨论】:

    • @aman 正如我在答案中提到的,应该是myData.myParameter= @Json.Encode(myparam); 在.net 中false.toString() 返回“False”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多