JQuery UI гармошка работает в режиме отладки MVC 4, но не в выпуске

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-консоли ошибка читается:

Uncaught TypeError: Невозможно прочитать свойство "сафари" неопределенного

Хорошо, поэтому я понимаю, что это может быть результатом того, что одна из моих сборников jQuery ссылается на $.browser, который, по-видимому, был удален в jQuery 1.9.

Однако тот факт, что он работает в режиме отладки (с использованием недопустимых версий), приводит меня к мысли, что это может быть не так. Я почти мог подумать, что это проблема с мини-версиями, но это тоже не возможно.

Кто-нибудь знает, почему это происходит, и знаете, как это исправить?

Обновление В соответствии с запросом я прикрепляю большую часть кода. Странно, что это работает в режиме отладки, но не в выпуске. Я не понимаю, почему произошли бы существенные изменения, которые могут вызвать эту проблему:

_Layout.cshtml

Изображение 174551

Bundleconfig.cs

Изображение 174551

Вид (который вызывает частичное представление)

Изображение 174551

Частичный вид

Изображение 174551

Код jquery

Изображение 174551

Ошибка JavaScript в Chrome

Изображение 174551

Большой обзор ошибки в хроме

Изображение 174551

Просто чтобы добавить. После публикации этого я удалил дубликат загрузки modernizr (пользовательский telerik был добавлен без меня, заметив). Проблема все еще сохраняется.

Обновление 2 Я отключил оптимизацию в bundleconfig.

BundleTable.EnableOptimizations = false;

Это позволило мне увидеть, что вызывало ошибку в jquery-ui, и, похоже, это был удаленный файл $.browser. Кажется, что на самом деле он загружает две старые версии jquery (current + 1.6.4 и 1.7.1) вместе с новой одной и двумя версиями jquery-ui (current + 1.8.16), последней из которых выдает ошибку. Ни один из этих файлов не загружается в мое решение или в папку с файлом.

Изображение 174551Изображение 174551

Кажется, это проблема с публикацией, но замаскированная связкой и минимизацией... Я попытаюсь исправить это и посмотреть, работает ли это.

Теги:
asp.net-mvc-4
accordion

2 ответа

2
Лучший ответ

Хорошо, так что это совсем не проблема с самим кодом, и я узнал что-то новое, что может помочь другим.

настройка

BundleTable.EnableOptimizations = false;

Помогло ли мне это решить.

Очевидно, что пакет Asp.Net MVC 4 связывает каждый скрипт, который находится в папке, где он выпущен, а не то, что находится в папке решения в Visual Studio. Я вообще не думал об этом... Но в ретроспективе это имеет смысл.

В сочетании с тем фактом, что параметры публикации по умолчанию VS не удаляют файлы, которые не равны файлам, которые вы публикуете, означает, что при удалении, т.е. старой версии JQuery и добавлении нового, старый остается на сервере.

Добавьте набор по умолчанию, используя {version} для выбора jquery, и у вас есть одна ошибка чтения метаданных с нечитаемой ошибкой. Пока вы не отключите связывание и минимизацию, становится очевидным, что я в этом случае загрузил 3 версии JQuery:

До

Изображение 174551

После

Изображение 174551

Решение? Просто, просто нужно расширить параметр "Параметры публикации файла" в мастере публикации и установить флажок "Удалить дополнительные файлы...":

Изображение 174551

Спасибо за предложения. Это помогло мне найти правильные места, но я не мог представить, что это проблема.

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)

так как вы не предоставляете jqueryUI, который нам нужно вызвать и рендерить после jQuery.

И ваш сценарий раздела должен быть вызван так,

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

}

Это то, что я предлагаю и должен работать, поскольку вещи MVC очень малы для определения точной проблемы, поэтому я предоставил все эти строки, спасибо,

Верните сообщение, если проблема не исчезнет.

  • 0
    Спасибо за предложение. Сделал несколько тестов сейчас, но проблема все еще там. Кажется, проблема в том, что jquery ui вызывает свойство safari для объекта, у которого нет этого свойства. Вы можете сказать, что некоторые файлы доступны в режиме отладки, что делает возможным вызов свойства "safari", но не в режиме выпуска. Понятия не имею, где и как это возможно. Не чувствую, что это связано с css, однако ничто не удивляет меня, когда дело доходит до такого рода вещей, поэтому я пытаюсь получить предложения, которые я получаю.
  • 0
    Я вижу, что вы не можете разместить ссылку! :( Вы тестируете это в Safari или другом браузере? Пожалуйста, попробуйте протестировать в браузере FireFox / Chrome и ответьте. Я думаю, что добавление вышеуказанного ресурса должно работать, также смотрите api.jquery.com/jQuery.noConflict, когда вы работаете с Kendo; Добавление $.noConflict(); должно иметь значение
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню