体验AspNet Mvc Preview5(2)-实战自定义View及多ViewEngine协作

本文上篇地址:体验AspNet MVC Preview5(1)-探索ViewEngine的原理并比较新老版本差异

    在上篇中,我们分别了解了两个系统对ViewEngine的处理,那么接下来我们来实战一下,使用asp.net mvc p5来添加自己的ViewEngine并同时使用多个ViewEngine来呈现数据.

    在这个例子中,工程和文件结构如下图:


 附件: 您所在的用户组无法下载或查看附件

在Library的程序集中,我们新增两个ViewEngine,分表是LViewEngine和WebViewEngine,并新增LView来具体呈现数据,供LViewEngine使用,而WebViewEngine使用系统自带的WebFormView来呈现数据.EngineManager用来管理ViewEngine.以实现系统换肤.BaseController继承自Controller,为web系统中所有Contoller的基类.

    首先看LViewEngine类,该类代码如下:


Code

Code


它继承自系统的VirtualPathProviderViewEngine,由于VirtualPathProviderViewEngine中封装好了对View路径的处理,因此继承自它可以让我们免于对路径的处理.在构造方法中.我们对MasterLocationFormats, ViewLocationFormats, PartialViewLocationFormats进行了设定,它们分表表示Master的路径选择,View的路径选择和PartialView的路径选择.当更改path的时候系统会将选择view的目录进行更改,从而实现了换肤. CreatePartialView和CreateView分别用于返回该ViewEngine对应的View.在这儿,我们返回的是LView.

然后我们再看LView部分,代码如下:



Code

Code


这是一个非常简单的自定义View实现,它的功能是读取指定路径的txt文件,然后对其中的{$}标记进行替换,替换规则为,对ViewData中的数据根据Key和Value进行替换,比如{$test}将被替换为ViewData[“test”],对Model的数据进行属性替换,如,{$.test}将被替换为ViewData.Model.test.至于实现方法,不再细谈.

再看WebViewEngine,它相当是对系统自带的一个WebFormView的封装.本来WebFormViewEngine是查找Views下的文件.我们进行修改后也将支持换肤功能,根据不同的path参数来使用不同的view文件(在老版本中,要实现该功能必须定义自己的ViewLocater类,然后继承Controller,在Controller中替换本身的ViewLocater).

而在EngineManager中,提供了ChangeSkin方法,它可以方便的将系统的view路径更改.

下面我们来测试我们自带的LView,在web项目中,新建Global.asax,修改关键代码:


Code

Code


分别用来初始化Routing和设置初始skin.

然后新建ArticleController,加入一个index方法,代码如下:



Code

Code


然后新增skins/default/article/index.txt文件.文件内容如下:



Code

Code


测试实例图:


 附件: 您所在的用户组无法下载或查看附件


很好,LView已经工作正常了.

然后我们测试多个View的混合工作.

添加新的方法:


Code

Code


然后添加skins/default/article/mixer.aspx文件.代码如下:


Code

Code


这儿有两个Html.RenderPartial调用,分表呈现top和foot.从工程中可以看到.我们拥有skins/default/article/top.txt和skins/default/article/foot.ascx文件.按照我们的设想,在呈现top会使用LView,在呈现foot的时候会使用WebFormView.

Top.txt的代码如下:


Code

Code


Foot.ascx代码如下:


Code

Code


最后查看效果:


 附件: 您所在的用户组无法下载或查看附件


恭喜.多个viewengine都工作的很好.

到这儿,本篇文章的任务已经全部完成.最后提供文中的测试工程:

 附件: 您所在的用户组无法下载或查看附件

下篇地址:体验AspNet MVC Preview5(3)-探索ModelBinder的工作原理




(文/leven  出处/博客园)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [Asp.Net] 的这些文章也感兴趣:

在ASP.NET中跟踪和恢复大文件下载
ASP.NET2.0中的数据源控件
用好ASP.NET2.0的URL映射
基于ASP.NET的Web动态控件创建
Asp.net Mvc Codeplex Preview 5 第一篇 Helper的新特性
Asp.Net 学习资源列表一
ELMAH - Error Logging Modules And Handlers
利用HttpHandler实现验证码
ASP.NET Mvc Preview 5 演示Demo #2 实现Membership角色权限控制
.NET框架中基于角色的安全性(3)