隨着Web窗體,框架可以自動包含Javascript(一次)當某個服務器對照頁面上使用; ASP.Net MVC沒有這樣的設施。聽起來這就是你想要的。
做到這一點的方法是在客戶端上。在http://requirejs.org/處查看RequireJS。這是一個用於管理Javascript依賴關係的客戶端庫。這就是Web Forms所做的,但更好,而且它做得更多。你的主人佈局將有一個腳本標籤是這樣的:
<script src="/Scripts/require.js" type="text/javascript" data-main="/Scripts/main"></script>
這可能是唯一的腳本標籤,你包括在每一頁上。只有RequireJS需要時才能動態加載其他所有內容。確實,你在每一頁上加載這個,但它比jQuery小,並且它贏得了它的位置,因爲它爲你做了很多。
使用你的例子,假設你有這樣的標記:
@Helpers.testListBox("mylist" "1,2,3,4,5,6,7")
和它呈現HTML,需要jQuery的腳本。你會呈現這樣的:
// HTML for list box here
<script type="text/javascript>
require(['jquery'], function($) {
// Do your jQuery coding here:
$("myList").doSomething().whatever();
});
</script>
的require
功能將加載jQuery的,除非它已經被加載,然後執行代碼。確實,您的jQuery片段在每次使用HTML助手時重複一次,但這不是什麼大問題;該代碼應該很短。
RequireJS有效管理的依賴;您可以擁有模塊A和依賴於A的模塊B以及依賴於B的模塊C.當您的客戶端代碼要求模塊C時,A和B將與C一起裝載,並且順序正確,並且只有一次每。此外,除了require.js的初始加載之外,腳本是異步加載的,因此您的頁面渲染不會因腳本加載而延遲。
當它的時間到Web服務器上部署你的網站,有一個工具,將檢查Javascript文件之間的依賴關係,並將它們組合成一個或少數幾個文件,然後最小化他們。你的標記根本不需要改變。在開發過程中,您可以使用大量小型模塊化JavaScript文件進行調試,並且在部署時將它們組合在一起並最小化以提高效率。
這比web表單框架所做的要好得多,完全是客戶端,在我看來它就是它的所在。
雖然我不是這樣的粉絲,但我已經看到人們用[腳本管理器]處理這個問題(http://pietschsoft.com/post/2009/08/13/Simple-ScriptManager-for-ASPNET- MVC.aspx)。不引人注意的Javascript是一個更清潔的方法。 – 2012-02-08 16:11:35