0

我在一个 ASP.NET MVC 4 应用程序上工作。

我更新了项目中的 jQuery、jQuery UI 和所有其他 nuget 包。构建它并运行它以查看没有出现任何问题。一切正常,所以我继续开发了几天。

过了一会儿,我将项目发布到测试服务器上,我必须看看它在 Ipad、Iphone 等上的外观。然后我意识到 jQuery-UI 手风琴停止工作。

它呈现,但不响应点击。这适用于所有浏览器。我发现这很奇怪,因为唯一的区别是我在发布模式下应用的 MVC 捆绑,据我所知,它要么缩小 jQuery 文件,要么选择缩小版本(后者可能会在这里做些什么,因为它是在更新时添加的使用 nuget)。

jQuery版本是:2.0.3

jQuery-ui 版本为:1.10.3

在 Chrome 控制台中,错误显示为:

未捕获的类型错误:无法读取未定义的属性“safari”

好的,所以我意识到这可能是我的一个 jQuery 程序集引用 $.browser 的结果,该引用显然已在 jQuery 1.9 中删除。

然而,它在调试模式下工作(使用非缩小版本)的事实让我认为它可能不是那样的。我几乎可以认为这是缩小版本的问题,但这也不应该是可能的。

任何人都知道为什么会发生这种情况并知道如何解决它?

更新 按要求附上大部分代码。奇怪的是,这在调试模式下有效,但在发布时无效。我不明白为什么会有任何重大变化会导致这个问题:

_Layout.cshtml

_Layout.cshtml

Bundleconfig.cs

BundleConfig.cs

视图(称为局部视图)

在此处输入图像描述

局部视图

在此处输入图像描述

jquery代码

在此处输入图像描述

Chrome 中的 javascript 错误

在此处输入图像描述

chrome中错误的更大视图

在此处输入图像描述

只是补充。发布此内容后,我删除了modernizr 的重复加载(在我没有注意到的情况下添加了telerik 自定义)。问题仍然存在。

更新 2 我关闭了 bundleconfig 中的优化。

BundleTable.EnableOptimizations = false;

这让我看到了在 jquery-ui 中引发错误的原因,而且似乎确实是 $.browser 被删除了。似乎它实际上加载了两个旧版本的 jquery(当前 + 1.6.4 和 1.7.1)以及新的一个和两个版本的 jquery-ui(当前 + 1.8.16),最后一个抛出错误。这些文件都没有加载到我的解决方案或文件夹中。

在此处输入图像描述 在此处输入图像描述

这似乎是一个发布问题,但被捆绑和缩小掩盖了......我会尝试解决这个问题,看看它是否有效。

4

2 回答 2

2

好的,所以这根本不是代码本身的问题,我学到了一些可能对其他人有帮助的新东西。

环境

BundleTable.EnableOptimizations = false;

是什么帮助我解决了这个问题。

显然,Asp.Net MVC 4 捆绑捆绑了在其发布的文件夹中找到的每个脚本,而不是 Visual Studio 中解决方案文件夹中的内容。我根本没有想到这一点……但回想起来,这有点道理。

结合 VS 默认发布设置不会删除与您发布的文件不相等的文件这一事实,这意味着当删除旧版本的 Jquery 并添加新版本时,旧版本仍保留在服务器上。

使用 {version} 为 jquery 选择添加默认捆绑,并且您有一个不可读的 jquery 文件抛出错误。直到您禁用捆绑和缩小,很明显我在这种情况下加载了 3 个版本的 Jquery:

在此处输入图像描述

在此处输入图像描述

解决方案?很简单,只需在发布向导中展开一个名为“文件发布选项”的设置并选中“删除其他文件...”:

在此处输入图像描述

感谢您的建议。它帮助我找到了正确的地方,但我无法想象这是问题所在。

于 2013-09-30T12:56:05.320 回答
0

我想你忘了添加 '"~/Content/themes/base/jquery-ui.all.css"' 注意:虽然你已经分别调用了所有模块,但有时调用单个文件会有所不同。因为我们在选择单独的模块时可能会错过一些依赖文件。

在 BundleConfig.cs 你需要添加/修改像..

bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
"~/Content/themes/base/jquery-ui.css",
"~/Content/themes/base/jquery-ui.all.css"
));

如果在您的本地人中存在 jQueryUI 文件,那么该文件将起到同样的作用(这可能是使其在本地测试上工作的问题)。

你的 _layout.cs 会像..

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Styles.Render("~/Content/themes/base/css")
@RenderSection("scripts", required: false)

因为您没有渲染我们需要在 jQuery 之后单独调用和渲染的 jqueryUI。

你的 Section 脚本应该这样调用,

@section Scripts{
@*@Scripts.Render("~/bundles/jqueryUI")*@
<script type="text/javascript">
$(document).ready(function () {
$("#accordian").accordian();
});

}

这是我将建议并且应该工作的内容,对于 MVC,事情真的很小,无法识别确切的问题,所以我提供了所有这些行,谢谢,

如果问题仍然存在,请回帖。

于 2013-09-30T11:29:20.837 回答