【问题标题】:jQuery DataTable won't work in ASP.NET MVC?jQuery DataTable 在 ASP.NET MVC 中不起作用?
【发布时间】:2013-04-21 02:11:17
【问题描述】:

我有一个带有简单表格的 index.cshtml 文件。我下载了 dataTable 插件的 css 文件和 min js 文件。我在 BundleConfig.cs 中放了以下代码:

bundles.Add(new ScriptBundle("~/bundles/table").Include(
                        "~/Scripts/jquery.dataTables.min.js"));

 bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
                        "~/Content/themes/base/jquery.ui.core.css",
                        "~/Content/themes/base/jquery.ui.resizable.css",
                        "~/Content/themes/base/jquery.ui.selectable.css",
                        "~/Content/themes/base/jquery.ui.accordion.css",
                        "~/Content/themes/base/jquery.ui.autocomplete.css",
                        "~/Content/themes/base/jquery.ui.button.css",
                        "~/Content/themes/base/jquery.ui.dialog.css",
                        "~/Content/themes/base/jquery.ui.slider.css",
                        "~/Content/themes/base/jquery.ui.tabs.css",
                        "~/Content/themes/base/jquery.ui.datepicker.css",
                        "~/Content/themes/base/jquery.ui.progressbar.css",
                        "~/Content/themes/base/jquery.ui.theme.css",
                        "~/Content/themes/base/jquery.dataTables.css"));
        }

在我的 _Layout.cshtml 中,我有这个:

@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/table")

最后,在我的 index.cshtml 中,我将以下代码放在我的表格上方:

<script type="text/javascript">
    $(document).ready(function () {
        $('#patients').dataTable();
    });
    </script>

我注意到当我运行带有表格的页面并查看源代码时,我看到底部的 jquery 文件和顶部的脚本,所以我收到错误:

Uncaught ReferenceError: $ is not defined

BundleConfig 是添加新 js 和 css 文件的正确位置吗?如果我不希望它在那里,我该怎么做?为什么jquery脚本在页面底部运行?

我在 _Layout.cshtml 中添加了以下内容:

@Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/modernizr")
    @Scripts.Render("~/bundles/table")

但现在我收到此错误:

Uncaught TypeError: Object [object Object] has no method 'dataTable'

当我查看源代码时,我看到 dataTables.min.js 不存在,但我已将其包含在 bundles/table 中。

【问题讨论】:

  • 在调用datatables之前有没有调用jquery.js?
  • 好吧,当我查看源代码时,我的脚本在 jquery 之前被调用,所以我知道它为什么未定义,但我认为 Modernizer 会在我的脚本之前运行 jquery,因为它包含在 _layout 中。 cshtml 文件。
  • 你在页面的什么地方包含了 jQuery?
  • 我认为 Modernizer 包含它,它在我的 _Layout.cshtml 中调用。
  • 我将它添加到我的 _layout.cshtml 中,但现在又出现了一个错误。

标签: jquery asp.net-mvc jquery-datatables


【解决方案1】:

默认情况下,如果您的 web.config 中有 Debug="True",则最小化的 javascript 文件不会包含在捆绑包中。将此添加到您的 BundleConfig.cs(或使用非缩小的 javascript 文件,或在非调试模式下运行):

#if DEBUG
            //by default all minimized files are ignored in DEBUG mode. This will stop that.
            bundles.IgnoreList.Clear();
#endif

其他信息:Bundler not including .min files

【讨论】:

  • 就是这样。这完全让我失望。谢谢。
  • 10 个月后:谢谢!!终于不那么头疼了。
【解决方案2】:

Modernizer,开箱即用的 asp.net MVC 项目,与 jQuery 无关。

我会更新你的包,让你有一个用于 jQuery 和一个用于 jQuery 插件,或者两者兼而有之。例如

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

如果您添加任何其他 jQuery 插件,则只需将它们注册到 jQueryPlugins 包。

然后确保在您的 _Layout 中首先渲染 jQuery 包。

@Scripts.Render("~/bundles/jQuery")
@Scripts.Render("~/bundles/jQueryPlugins")

这样你就知道你总是在插件之前包含 jQuery。

注意

还要确保在页面上的 jQuery 代码之前渲染脚本。例如

@Scripts.Render("...")

之前

$(document).ready(function(){ .... }

【讨论】:

  • 蒂姆,jQuery 已经在那里了。我将 dataTable 添加为 ~/bundles/tables 并将其添加到我的 _Layout.cshtml,但它说 dataTable 不是方法
  • Tim,我将@Scripts.Render("~/bundles/table") 放在页面顶部,但是在查看源代码时,我没有看到dataTables 插件脚本。另外,如果它已经用 Layout.cshtml 渲染了,为什么还要把它放在我的 Index.cshtml 页面中呢?
  • 不,您的 Index.cshtml 中不需要它。只需确保您的 Index.cshtml 中的代码在 _Layout 页面上的脚本渲染之后。
  • 我把它放在最上面,但我什至没有看到加载的插件。
  • 它调用 jquery,然后是我的脚本。它没有加载我放入 ~/bundles/table 的 dataTable 插件。
猜你喜欢
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多