3

我已经看了一下:'$' 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 添加;所以我手动将 BundleConfig.cs 文件添加到 App_Start 文件夹并添加代码来定义 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 未初始化的原因......但我应该如何解决这个问题?

4

4 回答 4

2

实际问题与我的本地 IIS 有关,其中静态内容功能不可用。这产生了对 java 脚本和 css 文件的请求,其中以 OK 200 回答,但内容长度为零。有关如何修复 IIS 安装的信息,请参阅:https ://serverfault.com/questions/115099/iis-content-length-0-for-css-javascript-and-images。

以下代码现在按预期工作。唯一改变的是脚本包定义......

BundleConfig.cs

namespace MvcApplication1
{
    using System.Web.Optimization;

    public class BundleConfig
    {
        public const string BundlesJquery = "~/bundles/jquery";

        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle(BundlesJquery)
                .Include("~/Scripts/jquery-{version}.js"));
        }
    }
}

索引.cshtml

@using System.Web.Optimization
@using MvcApplication1
@model dynamic

@{
    this.ViewBag.Title = "title";
    this.Layout = "~/Views/Shared/Layout.cshtml";
}

@section Scripts
{
    @Scripts.Render(BundleConfig.BundlesJquery)
    <script type="text/javascript">
        $(document).ready(function() {
            alert("Hello World.");
        })
    </script>    
}

布局.cshtml

@using System.Web.Optimization
@using MvcApplication1
<!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", false)
    </body>
</html>
于 2013-05-31T20:18:51.880 回答
0

“为什么源地图有用?”

“好吧,假设您在生产站点上使用文件的压缩版本,包括 jQuery 的压缩版本。您收到一个重要客户遇到问题的报告。那么您如何调试它?您可以调试它如果您有未压缩的源,会容易得多,但在您的高流量生产站点上使用它不是一种选择。”

如果您只渲染版本“jquery 2.0”,您可以将其称为 jquery:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                 "~/Scripts/jquery-{version}.js"));

有关更多信息,请参阅

于 2013-05-31T17:49:11.887 回答
0

为什么不直接在 HTML 中添加脚本?

RootProject/
  Pages/
    MyPage.aspx
  JS/
    jquery-2-0.1.min.js

MyPage.aspx 的代码

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="../JS/jquery-2-0.1.min.js"></script>
    </head>
    <body>
        <div>
            @this.RenderBody()
        </div>
        @this.RenderSection("Scripts", required: false)
    </body>
</html>

如果将所有脚本添加到母版页会更好。(请注意,您必须在文件夹中升级(这次升级1级)然后找到文件的路径)

于 2013-05-31T17:39:39.443 回答
0

使用IE 11和本地网络上的开发/QA 服务器,它也可能是兼容性视图设置的问题。

单击 IE 11 右上角的工具图标(或按 Alt-X),然后单击“兼容性视图设置”。

确保服务器名称不在要使用兼容性视图设置的服务器列表中,并且未选中“在兼容性视图中显示 Intranet 站点”。

于 2014-06-27T15:40:14.377 回答