25

バンドルを ASP.NET MVC 4 で機能させようとしています。バンドルされた CSS 用に生成されたリンクから 404 エラーが発生します。私は次のことをしました:

  1. NuGet (v4.0.20710.0) 経由で「Microsoft ASP.NET Web Optimization Framework」パッケージをインストール

  2. 次の内容で App_Start ディレクトリに BundleConfig クラスを作成しました。

    using System.Web.Optimization;
    namespace BsdAppTemplate.Web_Nancy.App_Start
    {
        public class BundleConfig
        {
            public static void RegisterBundles(BundleCollection bundles)
            {
                bundles.Add(new StyleBundle("~/bundles/styles/cvi").Include(
                    "~/mainstyles.css"
                ));
            }
        }
    }
    
  3. サイト ルートの Web.config に以下を追加しました。

    <system.web>
        <compilation debug="false" targetFramework="4.5" />
    
        <pages>
          <namespaces>
            <add namespace="System.Web.Optimization"/>
            ...
          </namespaces>
        </pages>
    </system.web>
    
  4. MVC レイアウト ファイルの head 要素に以下を追加しました。

     @Styles.Render("~/bundles/styles/cvi")
    
  5. BundleConfig で参照されている CSS ファイル (「mainstyles.css」) を Web プロジェクトのルート ディレクトリにコピーしました。

レンダリングされたファイルのソースを表示すると、リンクが次のように表示されます。

<link href="/bundles/styles/cvi" rel="stylesheet"/>

このリンクを参照すると、または Chrome のネットワーク タブでページ リクエストを表示すると、404 が返されます。

Web フォームでも同等の方法を試しましたが、追加したときに生成されたリンクから同じ結果 (404) が得られます。

<%: Styles.Render("~/bundles/styles/cvi") %>
4

7 に答える 7

27

RegisterBundlesを呼び出して構成を適用する手順を見逃しているようですApplication_Start

protected void Application_Start()
{
    ...
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    ...
}

通常、BundleConfig(プロジェクト テンプレートの一部として、またはインストール中に NuGet パッケージによって作成された) クラスが既に存在する場合、この呼び出しも既に存在します。これが、多くのチュートリアルで暗黙的に行われている理由です。

また、懸念事項を分離し、クリーンなBundleConfig状態を保つためにクラスが存在することにも注意してください。Application_Start単純なケースでは、バンドルを に直接登録することを妨げるものは何もありませんApplication_Start:

protected void Application_Start()
{
    ...
    BundleTable.Bundles.Add(new StyleBundle("~/bundles/styles/cvi").Include("~/mainstyles.css"));

    ...
}
于 2013-11-04T18:39:07.903 に答える
5

私は同じ問題を抱えていました(ASP.Net Webフォームで)、Global.asaxの「bundles /」ルートを無視して問題を解決しました:

routeCollection.Ignore("bundles/{*catch}");
于 2016-09-03T05:33:25.303 に答える
0

自分のマシンで作業しているときに「debug = false」で実行していたので、個々のファイルがロードされましたが、ステージ/本番にプッシュすると、/bundles/styles.

末尾のスラッシュを強制する書き換えルールがあることが判明したため、

/bundles/stylesにリダイレクトされまし/bundle/styles/たが、存在しません。書き換えの例外が追加され、問題なく動作するようになりました。

于 2021-03-21T17:33:41.253 に答える