8

我的 MVC 布局中有以下内容(在底部):

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/knockout")
@Scripts.Render("~/bundles/viewmodels")

我在开发人员工具的“源”选项卡中看到了淘汰赛加载。

在我的一种观点中,我必须做到以下几点:

<script type="text/javascript">ko.applyBindings(@Html.Raw(Json.Encode(Model)));</script>

但这给了我一个错误:ko is not defined

为什么会发生这种情况,尽管已经加载了淘汰赛?

4

4 回答 4

9

问题是我的视图是在淘汰赛之前加载的。将它推到我的 Layout.cshtml 的顶部:

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/knockout")

修复了问题。

于 2013-09-17T02:07:34.293 回答
2

您也应该将@ko.Apply(Model)放在页面底部,而不是在页面顶部拉脚本。

以下代码将解决您的问题

@section scripts{
    @ko.Apply(Model)
}

记得在布局视图上声明一个脚本部分,否则会导致异常

@RenderSection("scripts", required: false)
于 2014-11-11T03:26:47.927 回答
1

在我的场景中,@RobVious 的答案是一部分,但尚未完成。我按照这些步骤解决了问题。

  1. 将以下部分添加到<head>共享布局的标题中(例如_Layout.cshtml

    @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @Scripts.Render("~/bundles/knockout")

  2. 然后将敲除代码添加到文档就绪标签,如下所示。

    $(document).ready(function () { function AppViewModel() { this.firstName = "Bert"; this.lastName = "Bertington"; } ko.applyBindings(new AppViewModel()); });

  3. 如果这不起作用,请使用检查元素检查您是否正在加载knockout.js,如下所示 在此处输入图像描述

于 2018-01-18T06:05:42.770 回答
0

我通过删除 Index.cshtml 文件末尾的脚本行来解决我的问题:

<script src="~/Scripts/ConfigGroup.js"></script>

并将其替换为:

@section Scripts {
    @Scripts.Render("~/Scripts/ConfigGroup.js")
}

我猜脚本部分的加载时间与包含的时间不同。

现在我提到ko。在 ConfigGroup.js 脚本中不再有错误

于 2014-11-26T20:44:39.237 回答