• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETMVC:修改ViewLocator来动态切换模板

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 沈阳阿瑞 在我上一篇文章 ASP.NET MVC : 实现我们自己的视图引擎 中提到的一个问题:

一直在思考这个问题,
就是动态切换view来换主题
[views]
.|
.---[Controler1]
...|
...---[blue]
.... |
.... ---index.aspx
.... |
.... ---Edit.aspx
...---[Red]
.... |
.... ---index.aspx
.... |
.... ---Edit.aspx
.---[Controler2]
...|
...---[blue]
.... |
.... ---hello.aspx
.... |
.... ---report.aspx
...---[Red]
.... |
.... ---hello.aspx
.... |
.... ---report.aspx
这样,主题view无法独立出来,不利于分离主题,管理主题。
而我觉得,最理想的结构是
[views]
.|
.---[blue]
...|
...---[Controler1]
.... |
.... ---index.aspx
.... |
.... ---Edit.aspx
...---[Controler2]
.... |
.... ---hello.aspx
.... |
.... ---report.aspx
.---[Red]
...|
...---[Controler1]
.... |
.... ---index.aspx
.... |
.... ---Edit.aspx
...---[Controler2]
.... |
.... ---hello.aspx
.... |
.... ---report.aspx
但是如果用这种,默认的模板路径是不支持的。
看了你的文章恍然大悟。
改一下ViewLocator的逻辑就可以了对吧。

在这里简单给大家说下如何实现,只要给大家提供一点思路。其实把框架研究透彻了,真的很多问题都迎刃而解。

大家如果有看过我的上篇文章 ASP.NET MVC : 实现我们自己的视图引擎 ,其实就明白的了。

在这里,首先我们需要一个配置文件来配置站点要使用的模板(主题)。

Config/Site.config :

<?xml version="1.0" encoding="utf-8"?>
<site>
<appsetting ViewTheme="Default" />
</site>

 

然后修改默认的ViewLocator  :


public class uLinkViewLocator : ViewLocator
    }
 

还有修改ViewEngine的ViewLocator 为刚才创建的uLinkViewLocator :


public class uLinkViewEngine : WebFormViewEngine
    }
 

然后创建一个ControllerFactory继承自默认的DefaultControllerFactory,以修改默认的controller中的ViewEngine为我们创建的uLinkViewEngine :


public class uLinkControllerFactory : DefaultControllerFactory
    }

在Global.asax.cs中的Application_Start 事件中注册我们的 uLinkControllerFactory :

ControllerBuilder.Current.SetControllerFactory(typeof(uLinkControllerFactory));
然后在写一个设置模板的Controller:
    }

 

收工,搞定。
详细就不说了,关键代码都高亮显示了。具体可以参考我上一篇文章ASP.NET MVC : 实现我们自己的视图引擎
演示地址:http://www.aspdognet.cn/PEuLink/Home.mvc
 

Enjoy!

版权声明:本文首发于博客园,作者为QLeelulu
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NETMVC5请求管道和生命周期发布时间:2022-07-10
下一篇:
ASP.NET(C#)--Repeater中生成“序号”列发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap