欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

ASP.NET MVC :實現我們自己的視圖引擎_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:WPF自定義漂亮的按鈕樣式
首先打開 Microsoft Visual Studio 2008 ,新建一個WPF項目,在上面隨便放幾個按鈕: 然后給各個按鈕設置不同的背景顏色: 設置好之后就是這樣啦: 然后我們就開始在 App.xaml

在ASP.NET MVC的一個開源項目MvcContrib中,為我們提供了幾個視圖引擎,例如NVelocity, Brail, NHaml, XSLT。那么如果我們想在ASP.NET MVC中實現我們自己的一個視圖引擎,我們應該要怎么做呢?

我們知道呈現視圖是在Controller中通過傳遞視圖名和數據到RenderView()方法來實現的。好,我們就從這里下手。我們查看一下ASP.NET MVC的源代碼,看看RenderView()這個方法是如何實現的:

以下為引用的內容:
protected virtual void RenderView(string viewName, string masterName, object viewData) {
ViewContext viewContext = new ViewContext(ControllerContext, viewName, masterName, viewData, TempData);
ViewEngine.RenderView(viewContext);
}//

這是P2的源碼,P3略有不同,原理差不多,從上面的代碼我們可以看到,Controller中的RenderView()方法主要是將ControllerContext, viewName, masterName, viewData, TempData這一堆東西封裝成ViewContext,然后把ViewContext傳遞給ViewEngine.RenderView(viewContext)。嗯,沒錯,我們這里要實現的就是ViewEngine的RenderView()方法。

ASP.NET MVC為我們提供了一個默認的視圖引擎,這個視圖引擎叫做:WebFormsViewEngine. 從名字就可以看出,這個視圖引擎是使用ASP.NET web forms來呈現的。在這里,我們要實現的視圖引擎所使用的模板用HTML文件吧,簡單的模板示例代碼如下:

以下為引用的內容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=""http://www.w3.org/1999/xhtml"">http://www.w3.org/1999/xhtml" >
<head>
<title>自定義視圖引擎示例</title>
</head>
<body>
<h1>{$ViewData.Title}</h1>
<p>{$ViewData.Message}</p>
<p>The following fruit is part of a string array: {$ViewData.FruitStrings[1]}</p>
<p>The following fruit is part of an object array: {$ViewData.FruitObjects[1].Name}</p>
<p>Here's an undefined variable: {$UNDEFINED}</p>
</body>
< ml>

下面馬上開始我們的實現。首先,毫無疑問的,我們要創建一個ViewEngine,就命名為 SimpleViewEngine 吧,注意哦,ViewEngine要實現IViewEngine接口:

以下為引用的內容:

public class SimpleViewEngine : IViewEngine
{
#region Private members

IViewLocator _viewLocator = null;

#endregion

#region IViewEngine Members : RenderView()

public void RenderView(ViewContext viewContext)
{
string viewLocation = ViewLocator.GetViewLocation(viewContext, viewContext.ViewName);
if (string.IsNullOrEmpty(viewLocation))
{
throw new InvalidOperationException(string.Format("View {0} could not be found.", viewContext.ViewName));
}

string viewPath = viewContext.HttpContext.Request.MapPath(viewLocation);
string viewTemplate = File.ReadAllText(viewPath);

//以下為模板解析
IRenderer renderer = new PrintRenderer();
viewTemplate = renderer.Render(viewTemplate, viewContext);

viewContext.HttpContext.Response.Write(viewTemplate);
}

#endregion

#region Public properties : ViewLocator

public IViewLocator ViewLocator
{
get
{
if (this._viewLocator == null)
{
this._viewLocator = new SimpleViewLocator();
}
return this._viewLocator;
}
set
{
this._viewLocator = value;
}
}

#endregion
}

在這里實現了IViewEngine接口提供的RenderView()方法,這里要提供一個ViewLocator的屬性。ViewLocator的主要就是根據控制器中傳來的視圖名,進行視圖的定位。在RenderView()方法中首先獲取視圖的路徑,然后把視圖模板讀進來,最后進行模板的解析然后輸出。

我們再來看一下ViewLocator是如何實現的。他是IViewLocator類型的,也就是說SimpleViewLocator實現了IViewLocator接口。SimpleViewLocator的實現代碼如下:

以下為引用的內容:
public class SimpleViewLocator : ViewLocator
{
public SimpleViewLocator()
{
base.ViewLocationFormats = new string[] { "~ iews/{1}/{0}.htm",
"~ iews/{1}/{0}.html",
"~ iews d/{0}.htm",
"~ iews d/{0}.html"
};
base.MasterLocationFormats = new string[] { "" };
}
}

我們的SimpleViewLocator 是繼承自ASP.NET MVC的ViewLocator類,而ViewLocator則是實現了IViewLocator接口的。由于ViewLocator已經為了完成了全部的工作,這里我們只需修改下他的ViewLocationFormats 來使用我們自己的模板文件就可以了。

我們再來看一下類圖,那就更加清楚了:

注:關于模板解析的部分代碼這里就不說了,不在討論范圍內,可以自己下載代碼來看。

現在我們基本完成了我們的視圖引擎,那么如何讓ASP.NET MVC不要使用默認的web forms視圖引擎,而使用我們自定義的視圖引擎呢?

在ASP.NET MVC中,所有的請求都是通過一個工廠類來創建Controller實例的,這個工廠類必須實現IControllerFactory 接口。默認的實現該接口的工廠類是DefaultControllerFactory。這個工廠類就是我們修改默認的視圖引擎為我們的視圖引擎的入口點。為了方便,我們創建一個繼承自DefaultControllerFactory的SimpleControllerFactory :

以下為引用的內容:
public class SimpleControllerFactory : DefaultControllerFactory
{
protected override IController CreateController(RequestContext requestContext, string controllerName)
{
Controller controller = (Controller)base.CreateController(requestContext, controllerName);
controller.ViewEngine = new SimpleViewEngine();//修改默認的視圖引擎為我們剛才創建的視圖引擎
return controller;
}
}

這里只要修改controller.ViewEngine為我們自定義的ViewEngine就可以了.最終的類圖大概如下:

要使我們創建的控制器工廠類SimpleControllerFactory 成為默認的控制器工廠類,我們必須在Global.asax.cs中的Application_Start 事件中添加如下代碼:ControllerBuilder.Current.SetControllerFactory(typeof(SimpleControllerFactory));

到這里,我們已經完成了我們自己的視圖引擎。

在ASP.NET MVC中實現自定義的視圖引擎是很簡單的,難點在于模板的解析,具體大家可以研究MvcContrib中的四個視圖引擎的代碼。最近要對模板引擎進行研究,大家有什么其他優秀的、成熟的、開源的模板引擎,麻煩給小弟推薦一下,先謝了。

Enjoy!

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則視為侵權。 原文鏈接:http://www.cnblogs.com/QLeelulu/archive/2008/07/14/1242935.html

分享:裝箱、轉型、方法調用他們究竟有什么區別?
以下為引用的內容: 裝箱、轉型、方法調用這些我們天天進行的日常工作之前到底有什么差別? 以

來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
相關.Net教程
国产成人精品优优av| 亚洲视频小说图片| 亚洲欧美另类国产| 色一情一乱一伦一区二区三欧美 | 亚洲男男av| 国产成a人亚洲精品| 亚洲国产精品中文| 亚洲国产精品一区在线观看不卡| 开心激情五月网| 国产人妖ts一区二区| 久久综合久久综合久久| 日韩中文字幕免费看| 国产xxxx振车| 中文字幕乱码视频| 精品白丝av| 欧美在线观看视频在线| 91成人免费看| 老熟妇一区二区| 哺乳挤奶一区二区三区免费看| 久久久久久久久久电影| 久久午夜a级毛片| a在线视频观看| 国产a级免费视频| 日本大胆欧美人术艺术动态| 日韩欧美成人一区| 色涩成人影视在线播放| 亚欧洲精品在线视频| 手机在线电影一区| 狠狠躁夜夜躁久久躁别揉| 91精品视频在线| 亚洲 小说 欧美 激情 另类| 在线精品国产亚洲| 国产精品久久久久久久久免费桃花 | 久久综合五月天婷婷伊人| 精品国产一区二区三区久久| 国产淫片免费看| 性色av蜜臀av| 国产九色精品成人porny| 国产一区二区三区18| 91午夜在线观看| 国产又色又爽又黄又免费| 久久最新视频| 国产视频亚洲精品| 久久在线中文字幕| 国产精品嫩草影院精东| 看片网站欧美日韩| 中文字幕成人精品久久不卡| 男女午夜激情视频| 亚洲欧美se| 91在线你懂得| 97免费视频在线| 免费日本黄色网址| 欧美调教在线| 午夜激情久久久| 国产一区二区免费电影| 久久久久久久久艹| 激情亚洲成人| 精品国产99国产精品| 欧美一级中文字幕| 亚洲福利在线观看视频| 国产乱码精品一区二区三区av | 久久久久久久久久91| 亚洲精品97| 欧美麻豆精品久久久久久| 午夜精品区一区二区三| 国产美女www| 日本欧美在线观看| 中文字幕久久久| xxx国产在线观看| 99re8精品视频在线观看| 国产精品伦理在线| 成人天堂噜噜噜| 欧美黑人一级片| 伊人精品在线| 日韩精品视频免费| 免费在线观看毛片网站| 欧美日韩精品免费观看视欧美高清免费大片| 91一区二区三区在线观看| 51午夜精品视频| 级毛片内射视频| 99久久精品网站| 日韩欧美黄色影院| 久草热视频在线观看| 成人教育av| 国产精品久久久爽爽爽麻豆色哟哟 | 深夜视频在线观看| 久久99精品久久久久久欧洲站| 亚洲国产成人av网| 久久精品国产精品国产精品污| 天堂中文字幕在线观看| 免费看精品久久片| 欧美日韩第一页| 手机在线看片日韩| 日韩欧美视频专区| 欧美tk—视频vk| 波多野结衣家庭教师在线播放| 日韩av大片站长工具| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 在线观看久久久久久| 伊人国产精品视频| 理论片一区二区在线| 欧美亚洲国产怡红院影院| 亚洲黄色网址在线观看| 污污网站免费在线观看| 国产精品毛片高清在线完整版 | 中文字幕精品影院| 69av一区二区三区| 国产男女在线观看| 欧美一区在线观看视频| 一本一本久久a久久精品综合麻豆| 亚洲综合网中心| 无码h黄肉3d动漫在线观看| 中文字幕在线一区免费| 久热这里只精品99re8久| 91精品国产综合久| www久久久久| 97碰碰视频| 中文字幕人妻精品一区| 99久久免费视频.com| 成人国产精品色哟哟| 日韩一区二区视频在线| 亚洲av无码乱码国产麻豆| 日韩精品社区| 欧美三级在线视频| 免费观看日韩毛片| av不卡一区| 欧美精品粉嫩高潮一区二区| 免费高清在线观看免费| caoporn成人免费视频在线| 欧美日韩免费不卡视频一区二区三区 | 欧美图区在线视频| 欧美 日韩 国产 高清| 国产精品中文| 欧美色中文字幕| 人妻有码中文字幕| 老司机aⅴ在线精品导航| 欧美一级一区二区| 亚洲欧美日韩精品一区| 精品国产乱码久久久| 亚洲精品国产福利| 黄色激情在线观看| 激情文学一区| 欧美激情视频一区二区| 国精品无码一区二区三区| 日本中文在线一区| 国产成人jvid在线播放| 天天综合网入口| 99免费精品在线观看| 国产精品国产三级国产专区53| 97精品人妻一区二区三区| 中文字幕精品一区二区精品绿巨人 | 免费黄色激情视频| 久久国产精品色| 国产精品视频一| 伊人网av在线| 中文字幕一区二区三区在线观看| 日韩尤物视频| 国产91精品在线| 欧美三级资源在线| 一二三级黄色片| 艳女tv在线观看国产一区| 插插插亚洲综合网| 乱h高h女3p含苞待放| 国产一区二区女| 成人av免费看| 天堂av资源在线| 欧美性极品少妇精品网站| 啊啊啊一区二区| 国产一卡不卡| 中文字幕日韩视频| 夫妻性生活毛片| 成人动漫一区二区三区| 精品乱码一区二区三区| 欧美日韩精品免费观看视欧美高清免费大片 | 亚洲精品女av网站| 日韩中文字幕综合| 色婷婷av一区二区| 性生活免费在线观看| 在线免费观看日本欧美爱情大片| 欧美精品在线观看| 欧美一级高潮片| 久久免费视频色| 一本久道久久综合| 97久久综合精品久久久综合| 日韩国产欧美区| 992在线观看| 成人av午夜影院| 欧美13一14另类| 亚洲日韩中文字幕一区| 精品国产免费视频| 日本xxxxxxxxx18| 国产一区在线视频| 久久99久久精品国产| 日本午夜免费一区二区| 精品福利一区二区三区| 亚洲一级片在线播放| 成人免费的视频| 亚欧洲精品在线视频免费观看| 日韩在线精品强乱中文字幕| 亚洲欧美在线看| 欧美黑人精品一区二区不卡| 国产亚洲1区2区3区| 久久久久久久久久伊人| 国产欧美日韩影院| 欧美激情极品视频| 在线观看国产精品视频| 亚洲成人免费影院| 99国产精品久久久久久| 亚洲在线观看| 97av自拍| 久久亚洲精品人成综合网| 亚洲国产天堂久久国产91| 糖心vlog免费在线观看| xfplay精品久久| 国产精品videossex国产高清| av永久不卡| 韩剧1988在线观看免费完整版| 亚洲怡红院av| 在线一区二区视频| 成人性生活免费看| 国产精品亚洲一区二区三区妖精 | 国产精品一区二区三区精品| 日本久久一区| 日韩精品中文字幕视频在线| 欧美成人免费观看视频| 中文字幕一区二区三区av| 日韩精品一区二区三区不卡| 精品96久久久久久中文字幕无| 成人看片人aa| 久久爱.com| 亚洲人成亚洲人成在线观看| 日本三级黄色大片| 亚洲国产视频在线| 性鲍视频在线观看| 久久精品久久久精品美女| 欧美日韩亚洲免费| 夜色77av精品影院| 2019亚洲日韩新视频| 少妇高潮一区二区三区69| 日韩欧美成人一区二区| 五月天av网站| 亚洲人成精品久久久久| www.色欧美| 精品伊人久久久久7777人| 亚洲春色综合另类校园电影| 欧美色图激情小说| 国产精品美女久久久久av超清| 美女福利一区二区| 亚洲欧美制服第一页| 国产尤物在线视频| 色综合久久综合网欧美综合网| 风间由美一二三区av片| 99久久精品国产导航| 草草久久久无码国产专区| 亚洲在线电影| 奇米888一区二区三区| 妖精视频一区二区三区| 日本不卡视频在线播放| 精品网站在线| 中文字幕日韩精品在线| 国产精品毛片久久久久久久av| 91精品国产入口| 久草网在线观看| 图片区日韩欧美亚洲| 成人免费无码大片a毛片| 久久亚洲精品小早川怜子| 超碰网在线观看| 男女男精品视频| 天天综合中文字幕| 黄色av一区| 久久99导航| 精品高清久久| 91香蕉国产在线观看| 777久久精品| 欧美一区二区三区……| 韩国精品主播一区二区在线观看| 日韩在线国产精品| 国产后入清纯学生妹| 亚洲国产成人久久综合| 精品国产xxx| 欧美一区二区三区男人的天堂| 精品国产乱码久久久久久鸭王1| 性久久久久久久| 欧美熟妇激情一区二区三区| 亚洲视频在线观看三级| 国产真实乱人偷精品| 欧美激情自拍偷拍| 一区二区三区人妻| 久久久久综合网| 欧美一级特黄aaa| 91网站在线观看视频| 91女神在线观看| aaa国产一区| 天天操天天爱天天爽| 国产91精品在线观看| 日本在线视频www| 精彩视频一区二区三区| 毛片在线播放视频| 久久精品国产**网站演员| 日韩成人手机在线| 美腿丝袜在线亚洲一区| 免费网站永久免费观看| 日韩专区欧美专区| 国产一二三在线视频| 捆绑调教一区二区三区| 日韩精品 欧美| 国产一区二区在线观看免费| 青青草原av在线播放| 国产成人在线观看| 亚洲老女人av| av在线一区二区三区| 日韩欧美中文视频| 国产精品午夜免费| 无码人妻精品一区二区三区温州| 亚洲美女免费视频| 一级二级黄色片| 色综合中文字幕| 国产精品1234区| 91精品国产综合久久久久| 在线免费观看av网址| 亚洲国产毛片完整版| 国产不卡精品视频| 色播久久人人爽人人爽人人片视av| 天天操天天操天天操| 欧美国产在线视频| 伊人国产精品| 国产乱肥老妇国产一区二| 九色成人国产蝌蚪91| 精品欧美日韩在线| 黄色亚洲精品| 日韩video| 国产乱人伦偷精品视频不卡| 日本xxxx黄色| 欧美国产丝袜视频| 亚洲午夜久久久久久久久红桃| 亚洲一区二区三区中文字幕| 欧美日韩黄色网| 欧美精品九九99久久| 中文字幕在线2019| 中文字幕日韩在线观看| 99久久亚洲国产日韩美女| 国产精品∨欧美精品v日韩精品| 亚洲美女久久| 免费久久一级欧美特大黄| 美女精品在线观看| 男人操女人免费软件| 久久免费偷拍视频| 手机免费看av| 欧美性极品少妇| 在线观看中文字幕网站| 神马久久桃色视频| 中文幕av一区二区三区佐山爱| 成人免费视频a| 一区二区中文| 欧美一级爱爱视频| 电影一区二区三| 韩曰欧美视频免费观看| 青青草手机在线视频| 亚洲精品在线免费观看视频| 内射无码专区久久亚洲| 欧美伊久线香蕉线新在线| 国内精品久久久久久久久电影网| 日本一区二区三区免费观看| 日本少妇一区二区| 欧美一级小视频| 亚洲高清免费观看高清完整版在线观看 | 日韩av三区| 日韩视频专区| 极品少妇一区二区三区精品视频| 亚洲日本黄色片| 亚洲成人777| 无码人妻久久一区二区三区不卡| 伊人精品在线观看| 国产精品亚洲四区在线观看| 99视频在线播放| 免费在线日韩av| 日本高清久久久| 亚洲国产成人av| 中文精品久久久久人妻不卡| 久久久999精品| 欧美亚视频在线中文字幕免费| 欧美一区二区综合| 国产精品亚洲一区二区三区妖精| 在线免费播放av| 欧美日韩国产一级片| 亚洲第一天堂网| 国产精品久久久久久久久久尿| 亚洲精品成人| 精品国产成人av在线免| 亚洲欧洲另类国产综合| 亚欧视频在线观看| xx视频.9999.com| 婷婷综合成人| 可以免费看的黄色网址| 2020国产精品自拍| 亚洲国产成人精品综合99| 亚洲精品日韩丝袜精品| 国产精品一区二区精品视频观看| av一区二区三区| 国产制服丝袜在线|