54

Visual Studio2012を使用して新しいASP.NETWebフォームプロジェクトを作成しました。残念ながら、既定のSite.Masterファイルは非常にわかりにくいものです。(これらの質問は非常に関連があり、同じコードをかなり参照しているため、一緒に投稿しています。)

まず、バンドルとミニファイの目的をすでに理解しているので、それについて説明する必要はありません。ただし、スクリプトがデフォルトのマスターページに含まれている方法がどうなっているのかわかりません。

質問1:
BundleConfig.csファイルに「〜/ bundles / WebFormsJs」というバンドルが作成されているのに、マスターページでこれらの同じ個々の.jsファイルがScriptManagerに1つずつリストされているのはなぜですか。

BundleConfig.csの内部:

bundles.Add(new ScriptBundle("~/bundles/WebFormsJs").Include(
              "~/Scripts/WebForms/WebForms.js",
              "~/Scripts/WebForms/WebUIValidation.js",
              "~/Scripts/WebForms/MenuStandards.js",
              "~/Scripts/WebForms/Focus.js",
              "~/Scripts/WebForms/GridView.js",
              "~/Scripts/WebForms/DetailsView.js",
              "~/Scripts/WebForms/TreeView.js",
              "~/Scripts/WebForms/WebParts.js"));

Site.Masterの内部:

<body>
<form runat="server">
<asp:ScriptManager runat="server">
    <Scripts>
        <%--Framework Scripts--%>
        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="jquery" />
        <asp:ScriptReference Name="jquery.ui.combined" />
        <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
        <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
        <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
        <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
        <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
        <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
        <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
        <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
        <asp:ScriptReference Name="WebFormsBundle" />
        <%--Site Scripts--%>

    </Scripts>
</asp:ScriptManager>

ご覧のとおり、これらの同じ.jsファイルのそれぞれがScriptManagerに個別にリストされています。BundleConfig.csの外部で作成された「WebFormsJs」バンドルへの参照すら表示されません。これらのJavaScriptファイルのそれぞれがここScriptManagerで個別に参照される場合、なぜそのバンドルが作成されたのですか?

質問2:
なぜScriptManagerがこのように使用されているのですか?UpdatePanelsの使用など、MicrosoftのバージョンのAjaxにはScriptManagerが必要であるという印象を受けました。ここでScriptManagerを使用する目的は何ですか...JavaScriptファイルを登録するだけですか?

質問3:
ScriptManagerを介してjavascriptファイルを登録する場合と、代わりに次のアプローチを使用するSite.Masterの上部に登録する場合の違いは何ですか?

<%: Scripts.Render("~/bundles/modernizr") %>

質問4:
ScriptManagerの内部でも、次のことに気づきました。

        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="jquery" />
        <asp:ScriptReference Name="jquery.ui.combined" />

...少なくともBundleConfig.csから「MsAjaxBundle」を認識できますが、jqueryとjquery.ui.combinedはどこで定義されていますか?検索を行ったところ、packages.configでそれらへの参照が見つかりました。

<package id="jQuery" version="1.7.1.1" targetFramework="net45" />
<package id="jQuery.UI.Combined" version="1.8.20.1" targetFramework="net45" />

しかし、ここでも何が起こっているのかわかりません。NuGetにはpackages.configが使用されていると思いました。さらに...これらのjQuery.jsファイルの場所のパスがここにリストされていません。それらはここにリストされており、奇妙なことに.NET Frameworkの特定のバージョン(私の場合は4.5)に関連付けられています。javascriptリソースが.NETFrameworkのバージョンに関連付けられる理由は私にはわかりません。

とにかく、質問4はこれです:ScriptManagerのリソース「jquery」はどのように追加/使用されていますか?jQuery .jsファイルが他のすべてのバンドルと同じようにBundleConfig.csにバンドルされていないのはなぜですか?

質問5:
UpdatePanelやそのような種類のMicrosoft Ajaxコントロールを使用する予定がない場合、Site.Masterから次のスクリプト参照を削除できますか?これがデフォルトでここに含まれている理由について、私は少し混乱しています。

<asp:ScriptReference Name="MsAjaxBundle" />
4

3 に答える 3

17

更新:これは、これについても詳しく説明している新しいブログ投稿です:ASP.NETの記事

基本的に、Webフォームとバンドルは、scriptmanagerで変更できなかった多数のレガシー動作のため、次のようになります。

あなたの特定の質問に関して:

  1. 基本的に、これは重複排除が正しく機能するためです。スクリプトマネージャーには、元のスクリプトリソースに制限があり、スクリプトマップができないため、ディスクにマップする必要があります。ディスクは、ファイルが既にバンドルに含まれているため、適切に重複排除されます。WebformsBundleJsは、ScriptManagernupkgs内のPreAppStartコード内に作成されるスクリプトマッピングです。(私はこれを発見することはほとんど不可能であることに同意します)

  2. 控えめな検証などの新しい4.5機能には(scriptmanagerを介した)jqueryが必要でした。そのため、jqueryが2回レンダリングされないようにするためにスクリプトマネージャーが使用されました。

  3. これは正常に機能しますが、ScriptManagerで重複排除されることはありません。したがって、modernizrの場合は問題になりません。

  4. jqueryパッケージは、jqueryファイルをScriptsフォルダーのディスクにドロップします。

  5. その参照は、すべてのajaxスクリプトを含むmsajaxbundleをプルします。それらが必要ない/必要ない場合は、削除しても安全だと思います。

于 2012-09-06T21:23:49.983 に答える
0

私も多かれ少なかれ同じ質問をしました...

しかし、質問4に関しては私は別の意見を持っています。

WebFormsBundleとMsAjaxBundleは、どちらもPreAppStatCodeで定義されたスクリプト参照です(このファイルがどこにあるかわかりません)。

そのため、同じ場所(ScriptManager.WebForms PreAppStartCode)に、デフォルトでjqueryおよびjQueryUIスクリプト参照の別の定義があると感じています。これらの参照は、スクリプトマネージャーで使用されます。

このようにしてCDNなどの重要な機能を利用するため、このプロセスは非常に重要です。この特定の参照のPreAppStartCodeのjqueryの定義には、アクティブ化した場合に使用される定義済みのCDNパスがあります。マスターページのスクリプトマネージャーのEnableCDN(EnableCdn = "true")

于 2013-06-06T10:21:53.300 に答える
0

質問1の回答の受け入れの説明から何かを明確にするためだけに。

個々のWebフォームjsファイルのスクリプト参照の理由は、ローカルファイル(「〜/ Scripts / WebForms / WebForms.js」など)がSystem.Web.dllに存在する同じファイルをオーバーライドできるようにするためです( System.Web.dllを反映し、参照フォルダーを見ると、同じ.jsファイルが見つかります)。

于 2015-12-15T18:40:57.963 に答える