2015-08-17 53 views
1

我的網站的正常模式是每個頁面的功能都有一個JavaScript文件。讓主頁面加載所需的jQuery和jQuery UI文件。如何加載需要jQuery和ASP.NET 4.51的單個.js文件?

我剛剛開始在VS2013中使用ASP.NET 4.5 ...並且內置了一個很棒的捆綁/縮小功能。但是,當我將page.js「添加」到page.aspx時,它無法因爲主頁(其中包含jquery)中的「捆綁」JavaScript文件加載在我的page.js文件後面。

我曾考慮將所有單獨的頁面加載到包中,但這要求我映射出所有的表單域等,因爲現在將加載所有的單個JavaScript文件。

我還假設這是非常低效的,因爲jquery將嘗試將事件綁定到不存在的DOM對象(因爲page.js,page2.js,page4.js等將被加載到該包中而瀏覽器是在page3.js)

這是做什麼正確的方法是什麼?

我的其他選項是消除捆綁,但我想利用單個js/css文件。

想法?

+1

您是否選擇捆綁文件的位置?也許你可以在''標籤的頂部或''標籤的頂部附近加入'bundle.js'。 – azium

+0

在以前版本的ASP.NET中,它在site.master頁面中有headcontent節,但現在只有內容空間。 – jibboo

回答

1

答案1)當你的jQuery是從包進入或直接在母版頁鏈接:

您可以使用您的ContentPlaceHolder JS捆綁後呈現您的page.js。請確保在捆綁線下方添加ContentPlaceHolder。

1)在你的母版頁

<head runat="server"> 
    <meta charset="utf-8" /> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1" /> 
    <meta name="description" content="" /> 
    <meta name="author" content="" /> 
    <title></title> 

    <%: System.Web.Optimization.Scripts.Render("~/Bundles/js") %> 

    <asp:ContentPlaceHolder ID="cphPageJs" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 

2)在你的頁面

<asp:Content ID="Content1" ContentPlaceHolderID="cphPageJs" runat="server"> 
    <script src="/js/myPage.js"></script> 
</asp:Content> 

答案2)當jQuery是從ScriptManager的渲染:

在這種情況下,你會需要在您的內容頁面中使用ScriptManagerProxy。確保在Content中使用此控件,並在MasterPage中的ScriptManager之後添加ContentPlaceHolder。

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
    <asp:ScriptManagerProxy ID="smp" runat="server"> 
     <Scripts> 
      <asp:ScriptReference Path="~/js/myTest.js" /> 
     </Scripts> 
    </asp:ScriptManagerProxy> 
</asp:Content> 
+0

嗨Jibboo,請標記,如果你認爲這是答案。謝謝。 – NVyas

+0

我想你忘了附加一些東西? – NVyas

+0

NiraVyas - 查看我的其他評論/答案(作爲單獨的答案發布在上面或下面) – jibboo

0

所以,在我的標籤的底部添加HeadContent段之後,看來該文件的jquery.js被從ScriptManager的,而不是捆綁(即使它在BundleConfig.cs註冊)

呈現

請參閱下面的內容,默認情況下Scriptmanager是如何放置在標記中的。我可以將此移動到頭部嗎?這是默認的asp.net site.master佈局垃圾?我不相信別人沒有遇到這個問題。

因此,我的page.js文件現在位於modernizer捆綁文件(它包含誰知道什麼,因爲看起來很多js文件仍然是從scriptmanager逐行呈現的)之後的headcontent輸出。然而Scriptmanager把jquery放在我的headcontent輸出下面。

<head runat="server"> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
    <title>Website Title - <%: Page.Title %></title> 

    <asp:PlaceHolder runat="server"> 
     <%: Scripts.Render("~/bundles/modernizr") %> 
    </asp:PlaceHolder> 
    <webopt:bundlereference runat="server" path="~/Content/css" /> 
    <asp:ContentPlaceHolder ID="HeadContent" runat="server"> 
    </asp:ContentPlaceHolder> 
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 

</head> 
<body> 
    <form runat="server"> 
     <asp:ScriptManager runat="server"> 
      <Scripts> 
       <%--To learn more about bundling scripts in ScriptManager see http://go.microsoft.com/fwlink/?LinkID=301884 --%> 
       <%--Framework Scripts--%> 
       <asp:ScriptReference Name="MsAjaxBundle" /> 
       <asp:ScriptReference Name="jquery" /> 
       <asp:ScriptReference Name="bootstrap" /> 
       <asp:ScriptReference Name="respond" /> 
       <asp:ScriptReference Path="~/Scripts/site.js" /> 
       <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> 
+0

我更新了上面的答案,我認爲答案2是您的解決方案。 – NVyas