ASP.NET MVC 2自訂視圖引擎

來源:互聯網
上載者:User

  在ASP.NET MVC2中,視圖引擎的職責是根據參數選擇並建立視圖對象,視圖引擎不負責視圖內容的產生工作,視圖內容的產生工作由視圖對象來完成。
  在ASP.NET MVC2中,預設情況下,建立自訂的視圖引擎需要實現IViewEngine介面(該介面聲明在System.Web.Mvc命名空間中)。該介面聲明了三個方法,具體代碼如下:

 1 public interface IViewEngine
2 {
3 ViewEngineResult FindPartialView(
4 ControllerContext controllerContext,
5 string partialViewName,
6 bool useCache);
7
8 ViewEngineResult FindView(
9 ControllerContext controllerContext,
10 string viewName,
11 string masterName,
12 bool useCache);
13
14 void ReleaseView(
15 ControllerContext controllerContext,
16 IView view);
17 }
18  

  一般來說,幾乎所有的模版引擎都會使用虛擬路徑進行對視圖檔案的定位,並載入視圖。所以如果我們使用IViewEngine的話,我們就還需要編寫相應的路徑處理代碼。
  為了方便這種一般的形式,ASP.NET MVC2提供了一個基類VirtualPathProviderViewEngine,封裝了一些路徑處理常式。
  VirtualPathProviderViewEngine類是一個抽象類別。該類包含了各種路徑的查詢範本,可以根據controller和action的值進行查詢查應的視圖檔案。
  另外VirtualPathProviderViewEngine類還包含兩個用於建立視圖的方法,這兩個方法是抽像方法,需要我們繼承該類的時候實現這兩個方法。
  使用VirtualPathProviderViewEngine類還有一個好處:它會自動的在生產環境下進行緩衝。我們知道視圖檔案是在硬碟上存著的,而進行訪問視圖檔案的IO操作是很費資源的。使用VirtualPathProviderViewEngine類很簡單的解決了這個問題。
  總體來說,VirtualPathProviderViewEngine類需要我們關心的類結構聲明如下:

 1 public abstract class VirtualPathProviderViewEngine : IViewEngine
2 {
3 public string[] MasterLocationFormats { get; set; }
4 public string[] PartialViewLocationFormats { get; set; }
5 public string[] ViewLocationFormats { get; set; }
6
7 protected abstract IView CreatePartialView(
8 ControllerContext controllerContext,
9 string partialPath);
10
11 protected abstract IView CreateView(
12 ControllerContext controllerContext,
13 string viewPath,
14 string masterPath);
15 }
16  

  也就是說,繼承VirtualPathProviderViewEngine類需我們提供各種視圖檔案路徑的查詢範本,以及建立視圖的方法。在視圖檔案路徑模板中我們可以使用{0}、{1}的方式分別為Action名稱和Controller名稱提供預留位置。
  從上面VirtualPathProviderViewEngine類的結構中我們可以看到,這兩個抽像方法需要返回一個實現了IView介面的類的對象。所以,這裡我們還要實現一個實現IView介面的自訂的視圖對象類。
  IView介面的聲明如下:

1 public interface IView
2 {
3 void Render(ViewContext viewContext, TextWriter writer);
4 }

  這裡我們只要實現一個Render()方法即可。
  Render()方法需要兩個參數:viewContext和writer,這個方法的功能是根據viewContext中的資料產生視圖內容,把產生的內容寫到writer對象中。

  全部完成以後我們還要註冊我們自訂的視圖引擎,方法是在Global.asax檔案中的Application_Start()方法中使用ViewEngines類裡的Engines集合來添加我們自訂的視圖引擎。當然,在添加之前我們可以先清理掉ASP.NET MVC預設的視圖引擎。代碼如下:

1 ViewEngines.Engines.Clear();
2 ViewEngines.Engines.Add(new MyViewEngine());

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.