0

私は ASP.NET MVC 4 アプリケーションに取り組んでいます。

プロジェクト内の jQuery、jQuery UI、およびその他すべての nuget パッケージを更新しました。ビルドして実行し、問題が発生していないことを確認しました。すべてうまくいったので、数日間開発を続けました。

しばらくして、プロジェクトをテスト サーバーに公開し、Ipad や Iphone などでどのように表示されるかを確認する必要がありました。その後、jQuery-UI アコーディオンが機能しなくなったことに気付きました。

レンダリングされますが、クリックしても反応しません。これはすべてのブラウザに当てはまります。唯一の違いは、私がリリースモードで適用したMVCバンドルであり、私が理解している限り、jQueryファイルを縮小するか、縮小バージョンを選択することであるため、これは奇妙であることがわかりました(後者は、更新時に追加されるため、おそらくここで何をしているのかナゲットを使用)。

jQuery のバージョンは次のとおりです: 2.0.3

jQuery-ui のバージョンは 1.10.3 です。

Chrome コンソールでは、次のエラーが表示されます。

キャッチされていない TypeError: 未定義のプロパティ 'safari' を読み取ることができません

わかりました。これは、私の jQuery アセンブリの 1 つが $.browser を参照している可能性があることを認識しています。これは明らかに jQuery 1.9 で削除されました。

ただし、デバッグ モードで (縮小されていないバージョンを使用して) 動作するという事実から、そうではないのではないかと思います。縮小版の問題かと思いきや、そんなこともあり得ない。

なぜこれが起こるのか、そしてそれを修正する方法を知っている人はいますか?

更新 要求に応じて、ほとんどのコードを添付します。奇妙なことに、これはデバッグ モードでは機能しますが、リリース モードでは機能しません。この問題を引き起こす重要な変更がある理由がわかりません。

_Layout.cshtml

_Layout.cshtml

Bundleconfig.cs

BundleConfig.cs

ビュー (部分ビューを呼び出します)

ここに画像の説明を入力

部分的なビュー

ここに画像の説明を入力

jquery コード

ここに画像の説明を入力

Chrome の JavaScript エラー

ここに画像の説明を入力

クロムのエラーの拡大表示

ここに画像の説明を入力

追加するだけです。これを投稿した後、modernizr の重複ロードを削除しました (telek カスタム ロードは気付かないうちに追加されていました)。問題はまだ解決していません。

更新 2 bundleconfig の最適化をオフにしました。

BundleTable.EnableOptimizations = false;

これにより、jquery-ui で何がエラーをスローしているのかを確認できました。実際、削除されたのは $.browser のようです。実際には、jquery の 2 つの古いバージョン (現在 + 1.6.4 および 1.7.1) と、新しい 1 つおよび 2 つのバージョンの jquery-ui (現在 + 1.8.16) を一緒にロードして、最後にエラーをスローしたようです。これらのファイルは、ソリューションまたはファイル フォルダーに読み込まれません。

ここに画像の説明を入力 ここに画像の説明を入力

これは公開の問題のようですが、バンドルと縮小によって偽装されています...これを修正して、機能するかどうかを確認します。

4

2 に答える 2

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

}

これは私が提案するものであり、動作するはずです。MVC では、正確な問題を特定するには非常に小さいため、これらすべての行を提供しました。ありがとうございます。

問題が解決しない場合は、返信してください。

于 2013-09-30T11:29:20.837 に答える