程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 學習ASP.NET MVC(五) ViewEngine 深入解析與應用實例

學習ASP.NET MVC(五) ViewEngine 深入解析與應用實例

編輯:關於ASP.NET

一.摘要

本文講解ViewEngine的作用, 並且深入解析了實現ViewEngine相關的所有接口和類, 最後 演示了如何開發一個自定義的ViewEngine. 本系列文章已經全部更新為ASP.NET MVC 1.0版本.希望大家多 多支持!

二.承上啟下

首先注意: 我會將大家在MVC之前一直使用的ASP.NET頁面編程模型稱作ASP.NET WebForm編程模型.

上一講中我們已經學習了如何向View傳遞Model, 以及如何在View中使用Model對象. 目前為止我們使 用的都還是ASP.NET WebForm的頁面模型,比如aspx頁面,用戶控件,母版頁等. 最後這些頁面中都要轉換為 HTML代碼. 比如頁面中的內嵌代碼:

<% = ViewData["model"] %>你是否思考過, 為何頁面會支持<% %>這種語法? 為何最後一個aspx頁面會在浏覽器中以HTML代碼的形式展現?

有人會回答這是ASP.NET自帶的語法和功能. 沒有錯, ASP.NET幫我們做了編譯頁面, 輸出HTML, 返回 HTML給客戶端浏覽器等一系列工作.但是這些工作在MVC框架中有很多是屬於View角色的職責. 為了繼續使 用原有的ASP.NET WebForm頁面引擎, ASP.NET MVC抽象出來了ViewEngine這個角色. 顧名思義ViewEngine 即視圖引擎, 其主要作用就是找到View對象, 編譯View對象中的語言代碼(執行語言邏輯), 並且輸出 HTML. 下面講解的WebFormViewEngine就是使用ASP.NET WebForm的頁面編譯/呈現功能實現的.

三.ViewEngine解析

下面將講解和ViewEngine有關的各個接口和類.

IView接口

IView接口是對MVC結構中View對象的抽象, 此接口只有一個方法:

void Render(ViewContext viewContext, TextWriter writer);

Render方法的作用就是展示View對 象, 通常是將頁面HTML寫入到Writer中供浏覽器展示.

在本系列第三篇文章中我曾經分析過, 雖然IView對象是MVC中View角色的抽象, 並且提供了Render方 法, 但是實際上真正的View角色的顯示邏輯在ViewPage/ViewUserControl類中. 這是由於ASP.NET MVC提 供的WebFormViewEngine視圖引擎是使用原有的ASP.NET Web From的頁面顯示機制, 我們無法直接將 WebForm模型中的頁面轉化為IView對象.

於是最後使用了一個折中的辦法:

在IView對象的Render方法中調用WebForm頁面的Render方法. WebFormView是目前ASP.NET MVC中唯一 實現了IView接口的類

所以如果我們使用自定義的ViewEngine引擎, 就可以直接創建一個實現了IView接口的類實現Render方 法.

IViewEngine接口

ViewEngine即視圖引擎, 在ASP.NET MVC中將ViewEngine的作用抽象成了 IViewEngine 接口.

雖然IViewEngine的職責是尋找View對象, 但是其定義的兩個方法:

FindPartialView

FindView

返回的結果是ViewEngineResult對象, 並不是View對象. 我們可以將 ViewEngineResult理解為一次查詢的結果, 在ViewEngineResult對象中包含有本次找到的IView對象.

ASP.NET MVC 提供了下面兩個實現了IViewEngine接口的類:

VirtualPathProviderViewEngine

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved