【发布时间】:2015-12-08 02:52:15
【问题描述】:
_layout.cshtml 有代码行
@Scripts.Render("~/bundles/jquery")
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
默认情况下,它们被 MVC 放置在 <body> 标记内。但是当我将它们留在这个地方时,有时jquery 不起作用。所以我决定将这三行放在_layout.cshtml 中的<head> 块中,这样页面就会将样式和脚本文件放在<head> 中,就像任何人对php 或jsp 所做的那样。好消息是当我把这些文件放在<head> 中时,我所有的jquery 又开始工作了。但是大多数 MVC 书籍都说将脚本放在 <body> 块中。
那么我应该把它们放在哪里?
更新帖子:
这是我的捆绑文件:
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
"~/Scripts/jquery-ui-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive*",
"~/Scripts/jquery.validate*"));
}
这是布局文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
@Styles.Render("~/Content/css")
</head>
<body>
@RenderBody()
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/modernizr")
@RenderSection("scripts", required: false)
</body>
</html>
这里是视图:
@{
ViewBag.Title = "TestPage";
}
<h2>TestPage</h2>
<input type="submit" name="name" value="Click me" id="btn"/>
<div id="d1"></div>
<script type="text/javascript">
$('#btn').click(function(){
alert('clicked');
});
</script>
【问题讨论】:
-
建议将所有 javascript 文件添加到页面末尾,这样可以先呈现页面,并且不会减慢您感知的页面速度。 jQuery 需要成为底部添加的脚本列表中的第一个才能正常工作。您的问题很可能是您将脚本添加到 jquery 链接上方的正文中。
标签: asp.net-mvc-4