上篇交待了一些理論方面的東西,并給出了另外一種解決方案的處理流程。本篇将根據該處理流程,開始代碼方面的編寫工作。
1,打開VS,建立ASP.NET MVC Web項目,項目類型選擇空。名稱為 Mcmurphy.Web(該項目為前台項目)
2,在解決方案中添加以下項目:
1)Mcmurphy.Component(主要存放需要用到的實體類及枚舉)
2)Mcmurphy.Extension(HtmlHelper擴充類)
3)Mcmurphy.Tests (單元測試)
3,在 Mcmurphy.Component 項目中添加檔案:ResourceInfo.cs,表示我們的資源檔案資訊。代碼如下:
namespace Mcmurphy.Component
{
/// <summary>
/// 資源資訊
/// </summary>
public class ResourceInfo
{
/// <summary>
/// 連結位址
/// </summary>
public string Url { set; get; }
/// <summary>
/// 所屬分組
/// </summary>
public string Group { set; get; }
/// <summary>
/// 資源優先級
/// </summary>
public PriorityType Order { set; get; }
}
}
加入資源優先級的概念,可以對檔案的加載先後順序進行更加精确的控制,而不是完全通過添加順序進行加載。也就是說,優先級高的檔案,即使添加順序偏後,也會優先加載并渲染。這一點在随後的示範中會有所展現。
4,接下來添加優先級枚舉。在Mcmurphy.Component項目中添加Enumeration檔案夾,用于存在用到的枚舉資訊。建立PriorityType枚舉類。添加資源檔案時,如不指定優先級,預設為Normal。
namespace Mcmurphy.Component.Enumeration
{
/// <summary>
/// 優先級類型
/// </summary>
public enum PriorityType
{
/// <summary>
/// 最高優先級
/// </summary>
Highest = 1,
/// <summary>
/// 高優先級
/// </summary>
High = 2,
/// <summary>
/// 普通優先級
/// </summary>
Normal = 3,
/// <summary>
/// 低優先級
/// </summary>
Low = 4,
/// <summary>
/// 最低優先級
/// </summary>
Lowest = 5
}
}
5,為标記資源類型(樣式或腳本),再定義ResourceType枚舉。代碼為:
namespace Mcmurphy.Component.Enumeration
{
/// <summary>
/// 資源類型
/// </summary>
public enum ResourceType
{
/// <summary>
/// 樣式檔案
/// </summary>
StyleSheet = 0,
/// <summary>
/// 腳本檔案
/// </summary>
Script = 1
}
}
6,接下來我們就可以擴充HtmlHelper對象,實作View中資源添加的邏輯了。在Mcmurphy.Extension項目中,建立檔案CombineResourceExt.cs,修改該類為靜态類,然後添加以下方法代碼:
/// <summary>
/// 添加資源檔案
/// </summary>
/// <param name="htmlHelper"></param>
/// <param name="resType">資源類型</param>
/// <param name="url">檔案路徑</param>
/// <param name="group">檔案分組名稱,預設為空</param>
/// <param name="order">檔案同組中的優先級。預設:Normal</param>
public static void AppendResFile(this HtmlHelper htmlHelper, ResourceType resType, string url, string group = "", PriorityType order = PriorityType.Normal)
{
throw new NotImplementedException();
}
該方法擴充了HtmlHelper對象,同時指定了資源檔案的位址,分組,及優先級。熟悉MVC的朋友應該知道,現在我們在View頁面中,就可以這樣調用,以腳本檔案為例:
Html.AppendResFile(ResourceType.Script, "這裡是腳本檔案路徑");
或者手動指定優先級:
Html.AppendResFile(ResourceType.Script, "", PriorityType.High);
關于分組的概念,可以這樣了解:同屬一個分組的檔案,會合并其請求路徑,一次性向伺服器送出請求。今後我們會對其進行更加深入的說明。
為了View中更加友善的調用,我們展開Mcmurphy.Web項目,打開Views目錄下的web.config檔案,在<system.web.webPages.razor> 節點下,注冊程式集:
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<!--注冊程式集-->
<add namespace="Mcmurphy.Component.Enumeration"/>
<add namespace="Mcmurphy.Extension"/>
</namespaces>
</pages>
這樣,我們在每個View頁面中,不需要再手動 @using 上面兩個程式集,直接調用 Html.AppendResFile 方法即可。
接下來,鄙人将着重說明相關的路徑合并規則,并依據這些合并規則完善 CombineResourceExt 類。