【发布时间】:2013-05-27 14:11:27
【问题描述】:
我已经看过了:'$' is undefined,但是没有解决我的问题;这就是我打开另一个线程的原因。
这就是我所做的......
我使用 Visual Studio 2012 创建了一个新解决方案并添加了一个空的 ASP.NET MVC 4 项目。我添加了一个控制器类,定义了一个默认的 Index 操作方法,并让 Resharper 为其创建视图。项目结构如下:
root/
Controllers/
SampleController.cs
Models/
Views/
Sample/
Index.cshtml
Shared/
Layout.cshtml
Scripts/
jquery-2.0.1.js
jquery-2-0.1.min.js
jquery-2.0.1-min.map
jQuery 已通过 Nuget 添加;所以我手动向 App_Start 文件夹添加了一个 BundleConfig.cs 文件,并添加了代码来定义 jQuery 脚本包(RegisterBundles 将由 global.asax 调用)。
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery")
.Include("~/Scripts/jquery-2.0.*"));
}
我还定义了一个布局页面,内容如下...
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@this.ViewBag.Title</title>
</head>
<body>
<div>
@this.RenderBody()
</div>
@this.RenderSection("Scripts", required: false)
</body>
</html>
我的索引视图有以下内容...
@using System.Web.Optimization
@model dynamic
@{
this.Layout = "~/Views/Shared/Layout.cshtml";
}
@section Scripts
{
@Scripts.Render("~/bundles/jquery")
<script type="text/javascript">
$(document).ready(function() {
});
</script>
}
以下标记被渲染到输出流...
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
</head>
<body>
<div>
</div>
<script src="/root/Scripts/jquery-2.0.1.js"></script>
<script src="/root/Scripts/jquery-2.0.1.min.map"></script>
<script type="text/javascript">
$(document).ready(function() {
});
</script>
</body>
</html>
当我调试应用程序时,它会给我错误消息“$”未定义。我没有在本地 IIS 中托管应用程序,而是尝试通过 Visual Studio 的 Web 开发服务器运行它,这给了我另一个提示:语法错误(min.map 文件中的意外标记 ';')。可能是 jQuery 未初始化的原因……但是我应该如何解决这个问题?
【问题讨论】:
-
这通常有助于查看实际呈现给浏览器的内容:1)
@Scripts.Render()是否输出了任何内容? 2) 如果是这样,脚本src是否指向服务于jQuery 的URL? -
是的,@Scripts.Render 输出所有的 jQuery 脚本文件。
-
它是否可能会渲染多个 jQuery 副本(因为您的路径中有
*)? -
不;只是我放入列表中的文件。我还尝试直接添加脚本标签(而不是使用 BundleConfig)。
-
你能发布一份呈现的 HTML 的精确副本吗?
标签: jquery asp.net asp.net-mvc asp.net-mvc-4 razor