13

ASP.NET MVC 4 の新しい縮小化とバンドル機能を試してみましたが、css ファイルと js ファイルに既定のフォルダー規則を使用している限り、うまく機能します。

/Content
/Scripts

私は通常、このように Static というフォルダーに css とスクリプトを入れます

/Static/Css
/Static/Js

次のように独自のバンドルを登録しようとしました:

public static class BundleCollectionExtensions
{
    public static void RegisterScriptsAndCss(this BundleCollection bundles)
    {
        var bootstrapCss = new Bundle("~/Static/Css", new CssMinify());
        bootstrapCss.AddDirectory("~/Static/Css", "*.css");
        bootstrapCss.AddFile("~/Static/Css/MvcValidation.css");
        bootstrapCss.AddFile("~/Static/Css/bootstrap-responsive.min.css");
        bootstrapCss.AddFile("~/Static/Css/bootstrap.min.css");

        bundles.Add(bootstrapCss);

        var bootstrapJs = new Bundle("~/Static/Js", new JsMinify());
        bootstrapJs.AddDirectory("~/Static/Js", "*.js");
        bootstrapJs.AddFile("~/Static/Js/jquery-1.7.1.min.js");
        bootstrapJs.AddFile("~/Static/Js/jquery.validate.min.js");
        bootstrapJs.AddFile("~/Static/Js/jquery.validate.unobtrusive.min.js");
        bootstrapJs.AddFile("~/Static/Js/bootstrap.min.js");
        bootstrapJs.AddFile("~/Static/Js/gunsforhire.js");

        bundles.Add(bootstrapJs);
    }
}

そして

Global.ascx.cs

これは私がしました:

BundleTable.Bundles.RegisterScriptsAndCss();

生成されたマークアップは次のようになります。

<link href="/Static/Css?v=D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41" rel="stylesheet" type="text/css" />

<script src="/Static/Js?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1" type="text/javascript"></script>

ただし、機能しません。リクエストは次のようになります。

Request URL:http://localhost:49603/Static/Js?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1
Request Method:GET
Status Code:301 Moved Permanently (from cache)
Query String Parametersview URL encoded
v:mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1

Request URL:http://localhost:49603/Static/Js/?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1
Request Method:GET
Status Code:404 Not Found
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:localhost:49603
Referer:http://localhost:49603/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko)        Chrome/17.0.963.56 Safari/535.11
Query String Parametersview URL encoded
v:mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1
Response Headersview source
Cache-Control:private
Content-Length:4757
Content-Type:text/html; charset=utf-8
Date:Thu, 01 Mar 2012 19:05:44 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?B?   QzpcQENvZGVccGVsbGVccGVsbGVoZW5yaWtzc29uLnNlXHNyY1xXZWJcU3RhdGljXEpzXA==?=

私は何を間違っていますか?

アップデート

次のことを行うことで、最終的にこれを解決できたと思います。

  1. AddDirectory 呼び出しの削除bootstrapCss.AddDirectory("~/Static/Css", "*.css");

  2. 実際のディレクトリ構造を反映しないバンドル パスを指定する

4

4 に答える 4

7

あなたが「間違った」ことをしているのは、バンドル パスが REAL パスに対応していることです。私が理解しているように、「/Static/Css?v=D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41」のリクエストが来ると、ルーティング エンジンは最初に物理パスを探します。フォルダー「静的」との一致を見つけ、「Css?v=D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41」に一致するファイルを見つけようとします。存在しないために見つからない場合は、404 が返されます (アクセスが拒否されたこともありました)。ルーティング エンジンが物理ファイル パスを見つけられない場合、次のような他のハンドラーを探しますリクエストを処理するためのバンドルと縮小。

とにかく、あなたはあなたのコメントからそれを理解したと思いますが、あなたの質問を見つけた人にとってそれが非常に明確になるかどうかはわかりません. 以下から登録を変更するだけです。

var bootstrapCss = new Bundle("~/Static/Css", new CssMinify());

に:

var bootstrapCss = new Bundle("~/bundles/Css", new CssMinify());

その変更を行うと、問題は解消されます (ただし、「バンドル」に対応する物理パスはありません。

于 2013-02-14T16:12:07.510 に答える
4

数日前にこれを行った場合、うまくいきました。という名前のフォルダーを作成してから、という名前Helperの新しいクラスを作成しましたCssJsBuilder

私のクラスは次のようになります。

public static void Initializing()
{
   IBundleTransform jstransformer;
   IBundleTransform csstransformer;

#if DEBUG
            jstransformer = new NoTransform("text/javascript");
            csstransformer = new NoTransform("text/css");
#else
      jstransformer = new JsMinify();
      csstransformer = new CssMinify();
#endif

            var bundle = new Bundle("~/Scripts/js", jstransformer);

            bundle.AddFile("~/Scripts/jquery-1.6.2.js", true);
            bundle.AddFile("~/Scripts/jquery-ui-1.8.11.js", true);
            bundle.AddFile("~/Scripts/jquery.validate.unobtrusive.js", true);
            bundle.AddFile("~/Scripts/jquery.unobtrusive-ajax.js", true);
            bundle.AddFile("~/Scripts/jquery.validate.js", true);
            bundle.AddFile("~/Scripts/modernizr-2.0.6-development-only.js", true);
            bundle.AddFile("~/Scripts/AjaxLogin.js", true);
            bundle.AddFile("~/Scripts/knockout-2.0.0.debug.js", true);
            bundle.AddFile("~/Scripts/bootstrap.js", true);
            bundle.AddFile("~/Scripts/dungeon.custom.js", true);

            BundleTable.Bundles.Add(bundle);

            bundle = new Bundle("~/Content/css", csstransformer);

            bundle.AddFile("~/Content/bootstrap-responsive.css", true);
            bundle.AddFile("~/Content/bootstrap.css", true);

            BundleTable.Bundles.Add(bundle);

            bundle = new Bundle("~/Content/themes/base/css", csstransformer);

            bundle.AddFile("~/Content/themes/base/jquery.ui.core.css", true);
            bundle.AddFile("~/Content/themes/base/jquery.ui.resizable.css", true);
            bundle.AddFile("~/Content/themes/base/jquery.ui.selectable.css", true);
            bundle.AddFile("~/Content/themes/base/jquery.ui.accordion.css", true);
            bundle.AddFile("~/Content/themes/base/jquery.ui.autocomplete.css", true);
            bundle.AddFile("~/Content/themes/base/jquery.ui.button.css", true);
            bundle.AddFile("~/Content/themes/base/jquery.ui.dialog.css", true);
            bundle.AddFile("~/Content/themes/base/jquery.ui.slider.css", true);
            bundle.AddFile("~/Content/themes/base/jquery.ui.tabs.css", true);
            bundle.AddFile("~/Content/themes/base/jquery.ui.datepicker.css", true);
            bundle.AddFile("~/Content/themes/base/jquery.ui.progressbar.css", true);
            bundle.AddFile("~/Content/themes/base/jquery.ui.theme.css", true);

            BundleTable.Bundles.Add(bundle);
        }

その後。に行くGlobal.asax:

  1. 削除またはコメントアウトBundleTable.Bundles.RegisterTemplateBundles()
  2. メソッドに追加CssJsBuilder.Initializing()します。Application_Start()
  3. プロジェクトを再作成してから、もう一度開始してください。

これもうまくいくことを願っています。

于 2012-04-12T22:36:45.480 に答える
2

Global.asax.cs で置き換えます

BundleTable.Bundles.RegisterTemplateBundles();

BundleTable.Bundles.EnableDefaultBundles();

于 2012-04-25T16:23:08.830 に答える
0

これが私にとってどのように機能したかです。

これは簡略化されたバージョンで、default.aspxファイルのみを使用し、global.asax は使用しません (必要に応じて使用できます)。

この例では、Content2Scripts2の 2 つのディレクトリを使用します。

Content2 には、class="naziv" 用と class="naziv2" 用の 2 つの css ファイルがあります。

Scripts2 には、関数 f1() 定義を含むファイルと f2() 定義を含む 2 つのファイルがあります。

/bin ディレクトリには、次の 3 つのファイルがあります。

Microsoft.Web.Infrastructure.dllSystem.Web.Optimization.dllWebGrease.dll

<%@ Page Title="Home Page" Language="vb" debug="true"%>
<%@ Import namespace="System.Web.Optimization" %>

<script runat="server" >
    Sub Page_Load(sender As Object, e As EventArgs)
        System.Web.Optimization.BundleTable.EnableOptimizations = True ''true will force optimization even if debug=true

        Dim siteCssBundle = New StyleBundle("~/Content2/css")
        siteCssBundle.IncludeDirectory("~/Content2", "*.css")
        BundleTable.Bundles.Add(siteCssBundle)

        Dim siteJsBundle = New ScriptBundle("~/Scripts2/js")
        siteJsBundle.IncludeDirectory("~/Scripts2", "*.js")
        BundleTable.Bundles.Add(siteJsBundle)
    End Sub
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
    </head>
    <body onload="f1(); f2();">
        <%: Styles.Render("~/Content2/css")%>
        <%: Scripts.Render("~/Scripts2/js")%>
        <br />
        <span class="naziv">Span 1</span> <br />
        <span class="naziv2">Span 2</span> <br />
    </body>
</html>
于 2012-10-16T13:19:10.637 に答える