38

デフォルトのテンプレートを使用して MVC 4 を作成しまし@Script.Render(~"bundles/jquery")@RenderBody()この投稿によると、これは、ページのレンダリングをブロックするスクリプトの読み込みを防ぐために推奨される実行順序です。

RenderBody()ビューまたはセクションに小さな jQuery 呼び出しを追加したいと考えています。私のビューの上部には、次のように見えます。

<script type="text/javascript">
$(document).ready(function()
{
    $("#eta_table").tablesorter({
        headers: {
            0: { sorter: false }
        }
    });
});

ただし、Error: '$' is undefinedjQuery はRenderBody().

これが新しい問題だとは想像できません。かなり一般的なタスクのようです...これをどのように処理すべきかについて何か提案はありますか?

参考までに、jQuery が読み込まれる場所は次のとおりです。

        @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>

編集

上記のスクリプトを自分の scripts.js ファイルに移動し、次のようにレイアウト ページの jQuery の下にロードしました。

            bundles.Add(new ScriptBundle("~/bundles/custom").Include(
                    "~/Scripts/Custom/tablesorter.js",
                    "~/Scripts/Custom/scripts.js"));

そしてHTML:

        @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/custom")
    @RenderSection("scripts", required: false)
</body>

ただし、マスター レイアウト ビューを使用するすべてのページに対してスクリプトをロードする必要があるため、これはまだ間違っているようです。それは機能していますが、これが最善の方法ですか?

4

1 に答える 1

85

他のすべてのライブラリスクリプトの下に新しいセクションMyScriptsを作成します

_レイアウト

@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
@RenderSection("MyScripts", required: false)

私の見解

@section MyScripts {
    <script type="text/javascript">
        $("#eta_table");
        ...
    </script>
}

これで、カスタムページスクリプトは、jQueryがロードされた後に一度だけロードされます。

于 2013-03-11T20:27:23.507 に答える