jQuery DataTable не будет работать в ASP.NET MVC?
у меня есть индекс.cshtml файл с простой таблицей. Я загрузил файл css и файл min js для плагина dataTable. Я поместил следующий код в 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")
наконец, в моем индексе.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: объект [объект объекта] не имеет метода "dataTable"
когда я просматриваю источник, я вижу dataTables.минута.js нет там, но я включил его в bundles / table.
2 ответов
по умолчанию, если у вас есть Debug= "True" в вашем интернете.config, свернутые файлы 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 не включая .min files
модернизатор, из коробки с 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(){ .... }