2012-12-01 9 views
30

私は@RenderSection("scripts")セクションのレイアウトを持っていますが、の一部にはビュー用にこのセクションに含める必要があるバンドルがあります。私は、ビューでこれを行うだけで動作すると思ったが、スクリプトをレンダリングしていない。私の見解ではスクリプトセクションにスクリプトバンドルを含める方法

@section scripts { 
    @Scripts.Render("~/bundles/myBundle") 
} 

、どのように私は、スクリプトのセクションへのバンドルを含めることができますか?

レイアウト

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

ビュー

@section scripts { 
    @Scripts.Render("~/bundles/movie") 
} 
+1

これは間違いなく機能し、サポートされるはずです。バンドル名の入力ミスがないかどうかを確認します。あなたの 'BundleConfig'に'〜/ scripts/movie'ではなく '〜/ bundles/movie'を確認します。 – Mrchief

+0

私はここで信じられないほど遅いですが、明らかにVS2015でもこれが起こります。コードは正しいですが、正しくレンダリングするにはVSを再起動しなければなりませんでした。 – Lathejockey81

答えて

13

?バンドルのルートを下げることを選択した場合は、スクリプトを.JSファイルに置き、必要に応じて独自のバンドルに入れ、ビューでそのバンドルを呼び出すことができます。例の場合:

 bundles.Add(new ScriptBundle("~/bundles/myscripts").Include(
        "~/Scripts/myscript1.js", 
        "~/Scripts/myscript2.js")); 

、ビューには、次のものがあります:

@Scripts.Render("~/bundles/myscripts") 

はまた、あなたのWeb.configファイルは、以下のようにfalseに設定され、コンパイル、デバッグを持っていることを確認してください。

<compilation debug="false" />    

それは確認しますスクリプトはバンドルされ、縮小されます。

更新が

コメントと私の最近の経験に基づいて、私たちは一緒に2を使用したいと思う理由を見ることができます。コミュニティでの学習の完璧なケース! :)リファクタリングのために戻ってくることにしたら、まずはタイプミスがないことを確認します。それでも問題が解決しない場合は、問題の内容を教えてください。回答を更新します。みんな、ありがとう!

+1

レイアウトにjqueryバンドルの後にバンドルをロードする必要があるためです。上記のバンドルを私のビューでレンダリングするだけで、jqueryバンドルの前にレンダリングされます。 – bflemi3

+0

通常、ページの下部にあるデフォルトとは異なり、トップにjQueryバンドルを置くとすべて正常に動作します。 checkoutこのMVCミュージックストアコードhttps://github.com/tekpub/mvcmusic/tree/master/MvcMusicStore – Yogiraj

+4

すべてのページですべてをレンダリングしたくない場合があります。セクショニングはそれを制御します。すべてを頭の中に置くことは恐ろしい解決策です(jQueryは例外かもしれません)。 – Mrchief

35

ビュー内側に述べた解決策の下に試してみてください。

ビュー同梱してrendersectionを混ぜるのはなぜ

@section Scripts{ 
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/movie")"></script> 
} 
+11

これを受け入れられた回答としてください。 –

+0

これはなぜ受け入れられる回答ですか? 'debug'フラグを無視します。 – Dementic

+1

@Dementicそれであなた自身の答えを入れてみませんか? – Sampath

2

私はあなたが

@section scripts { 
    @Scripts.Render("~/bundles/movie") 
} 

を持っている問題を複製することはできませんが、私はあなたのパス他の

を@Mrchrefに同意し、再訪う なしの問題で正常にレンダリング(およびデバッグフラグを尊重します)

public static class Helpers 
{ 
    public static HtmlString StaticContent(this System.Web.Mvc.UrlHelper url, string contentPath) 
    { 
     return new HtmlString(System.Web.Optimization.Scripts.Render(contentPath).ToString()); 
    } 
} 

使用法:

手は、あなたはこのようなものを使用することができます
@section Scripts{ 
    @Url.StaticContent("~/assets/js/jquery") 
} 

System.Web.Optimization.Scripts.Render(contentPath).ToString()のソリューションは、基本的には使用している(動作していない)機能をレンダリングするため、別の解決策を見つける必要があります。

System.Web.Optimization.BundleTable.Bundlesで遊んで、両方のバージョンを照会してデバッグフラグを確認し、正しい内容を提供できるかどうかを確認してください。

1

私は新しいビルドがあなたの問題を解決すると信じています。次の手順を実行してください。そうでない場合:

  • ステップ1:BundleConfig.cs

    bundles.Add(new ScriptBundle("~/bundles/common").Include("~/Scripts/common.js"));

  • ステップ2にこれを追加します。あなたのview/layout

    @Scripts.Render("~/bundles/common")

    にこの行を追加します
  • 手順3:プロジェクトをビルドして実行します。

関連する問題