我的MVC布局(底部)中有以下内容:
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/knockout")
@Scripts.Render("~/bundles/viewmodels")
我在Developer工具的Sources选项卡中看到了knockout加载。
在我的一个观点中,我必须做以下事情:
<script type="text/javascript">ko.applyBindings(@Html.Raw(Json.Encode(Model)));</script>
但这给了我一个错误:ko is not defined
为什么会发生这种情况,尽管装满了淘汰赛?
答案 0 :(得分:9)
问题是我的视图是在淘汰赛之前加载的。把它推到我的Layout.cshtml顶部:
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/knockout")
修正了问题。
答案 1 :(得分:2)
你也应该在页面底部放置 @ ko.Apply(Model),而不是在页面顶部拉上脚本。
以下代码将解决您的问题
@section scripts{
@ko.Apply(Model)
}
请记住在布局视图中声明脚本部分,否则会导致异常
@RenderSection("scripts", required: false)
答案 2 :(得分:0)
我通过删除Index.cshtml文件末尾的脚本行修复了我的问题:
<script src="~/Scripts/ConfigGroup.js"></script>
并将其替换为:
@section Scripts {
@Scripts.Render("~/Scripts/ConfigGroup.js")
}
我想部分脚本会在不同于包含的时间加载。
现在我提到了ko。在ConfigGroup.js脚本中不再有错误
答案 3 :(得分:0)
在我的情景中@RobVious answer是部分但尚未完成。我按照这些步骤来解决问题。
将以下部分添加到共享布局的标题<head>
中(ex _Layout.cshtml )
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/knockout")
然后将淘汰代码添加到文档就绪标签中,如下所示。
$(document).ready(function () {
function AppViewModel() {
this.firstName = "Bert";
this.lastName = "Bertington";
}
ko.applyBindings(new AppViewModel());
});