2011-10-05 17 views
3

我想了解一下關於管理ASP .NET MVC中的腳本的意見。有2個問題,我特別好奇:管理ASP.NET MVC中的視圖頁面腳本

  1. 跟蹤腳本包括視圖的依賴
  2. 管理和涅槃視圖腳本

就像在很多項目我的意見是由幾個部分意見和編輯器模板。我喜歡在相同的代碼實體中保留與這些視圖相關的腳本,例如

SigningKeysForm局部視圖應該有它自己的JQuery/JQueryUI腳本。

這意味着任何呈現這個局部視圖的視圖都應該包含JQuery/JQueryUI腳本文件。

另一個問題是,當一個視圖是由幾個這樣的局部視圖組成時,這意味着部分視圖中的javascipt將在生成的html中的多個位置。

我目前處理這些問題的方法是利用ASP.Net MVC中自上而下的視圖解析。

爲了解決第一個問題,我定義了一個HtmlHelper擴展來包含一個腳本例如

<% Html.RequireScript(Scripts.JQuery); %> 

這種方式在每個局部視圖和視圖中明確地指出需要哪些腳本。這個方法的實現是在當前的HttpContext上創建一個HashSet,並在其中添加所需的腳本。

在我的母版頁我有另一個的HtmlHelper擴展,檢查的HttpContext並使腳本包括標籤如:

<%=Html.RenderScriptIncludeTags()%> 

這樣我可以跟蹤的意見要求,只渲染所需腳本包括。

對於視圖腳本我採用了類似的方法。我使用自定義的ASP.NET用戶控制其代替呈現其內容存儲腳本內容到緩衝區上的HttpContext例如:

<mvc:script runat="server"> 
    $(function(){ 
      alert("Hello " + "<%=Model.Name%>"); 
    }); 
</mvc:script> 
在主視圖我有一個擴展的HtmlHelper再次

其中minifies(如果需要)的存儲腳本和使他們如:

<%=Html.RenderScripts()%> 
</body> 

我想這樣的作品作爲一個解決方案,但它需要的腳本,包括和腳本是在母版頁的底部。這意味着腳本包含不在頭部分。

我想知道是否有更好的方法來管理腳本需求和使用ASP .NET MVC查看頁面腳本。

回答

3

你有沒有想過使用現有的工具來做這種事情,比如Cassette(以前叫做Knapsack)?

Cassette自動對所有JavaScript,CoffeeScript,CSS,LESS和HTML模板進行排序,連接,縮小,緩存和版本。

我還沒有親自使用它(但),但它看起來很不錯,而且看起來它應該完全按照您的需要(以及更多)進行操作。值得注意的是的成本很低。

編輯:現在在MIT許可下發布:)

+0

謝謝!我會看看它。 – Atacan

+0

看起來很有趣。 :) –

+0

你會如何與Cassette並行加載你的腳本? – Ryan

1

Telerik的有腳本註冊商工具,做你正在做什麼。

http://www.telerik.com/help/aspnet-mvc/web-assets-working-with-javascript-web-assets.html

作爲獎勵,它也不會壓縮。

是的,它呈現底部的腳本。
就我個人而言,我通常會在通常的方式中包含一些重要的腳本,其餘的則通過scriptregistrar進行。這樣我就可以在加載頁面的時候獲得一些腳本。

telerik腳本註冊商是他們的MVC套件的一部分。 http://www.telerik.com/products/aspnet-mvc.aspx

+0

Telerik的註冊商不會縮小。他們只會合併和壓縮你的東西。 – Achilles