MVC5程序发布后,样式丢失,出现错误: SCRIPT5009: “$”未定义

近些时间在用MVC5做个内部小系统,之前没怎么用过,开发工具采用 vs2015,C#。

在调试的时候一切正常,发布之后发现很多样式丢失,最关键的是出现错误:SCRIPT5009: “$”未定义,这就麻烦了,样式关系不是很大,可以,但这个用普通的UI和table来布局,但这个错误导会致功能无法正常使用,显然必需解决。

困扰了好几天,搜索了很多页面,大家提到的根本原因都是没有(正确)加载js、css文件,我把调试时的页面保存起来,把发布后的同一个页面也保存起来后对比,它们加载的 js文件确实差别很大,调试时的js文件很多,而发布的页面就很少。根据提示,进行如下修改:

        public static void RegisterBundles(BundleCollection bundles)
        {
            /*
                MVC 发布样式没有了:https://blog.csdn.net/jsl1933291679/article/details/52056890
                似乎没有效果,如下文章也说了一些问题:
                https://www.cnblogs.com/xiaoerlang90/p/5566817.html
            */
            BundleTable.EnableOptimizations = false;

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

把EnableOptimizations的优化给关闭后再发布,然后到同一页面再保存,这次发现和正常页面中的js、css文件名完全一样了,关键的jquery几个文件,内容完全一样,其它不一样的,主要是有问题的文件中的属性名被转换成了大写,其它的似乎都是一样的。这就有点奇怪了,既然都是一样,那样式为什么就会丢?注意,应该是丢了一部分,而不是全部,比如像 form-control 中的样式,就只有部分生效,自然布局也乱七八糟的,本来应该是像这样:

姓名: <输入框>

实际上它变成了两行:

    姓名:
<输入框>

比如 form-contrl 中有这样的一个模式:border-radius: 4px;,即让输入框变成圆角,实际上它是被丢掉了的,尝试修改其中的 height 值,它却是有效的,可以在页面上反应出来,还有颜色什么的也都是可以的,这就百思不得其解了。

实在没办法,就发了个贴子,结果一天了也没人回,然后呢,真是踏破铁鞋无觅处得来全不费工夫,在发布的贴子底下,有一个链接:

https://blog.csdn.net/wpj130/article/details/88723932

这个文章好呀,它直接说到了问题的核心点,然后我赶紧去对比下我的两个页面,发现好的页面中,相应的 meta 标记内容如下:

而有问题的页面的这个标记内容如下:

这个不一样的一个是7,一个是11,而上面页面中说的是edge。由于我这里11是正常的,所以我就直接在_Layout.cshtml的开头位置加上了11的那一行,像下面这样子的:


    @{ 
        string appName = "弹头追踪系统";

        /*
         * SCRIPT5009: “$”未定义 错误的解决方案:
         * https://blog.csdn.net/wpj130/article/details/88723932
         * 通过对比成功和失败的两个文件头,本方案稍有修改,如下所示。
         * 这个错误找了很久,搜索的结果,描述的原因核心都是缺少对应的js文件,而实际上对比,并不是缺少文件,通过上面的网址启发,对比后找到了不同。
         * 上述网址中,content值采用了“IE=edge”,而此处成功的网页中采用了“IE=11.0000”,所以这里也写成后者。
         */
    }

    
    

倒数第二行是我手工加上去的。修改后再发布,问题解决,样式也找回来了,$未定义也没有了。

当然,我这里没有用到 JSON,所以上面链接中的这个提示我没有遇到

 

你可能感兴趣的:(小知识,-,技术)