ASP.NET MVC 多套皮肤解决方案

原理自己写了一个ThemeController继承于Controller,先看我的文件结构:

ThemeController的具体实现:

 

   public   class  ThemeController : Controller
    {
        
private   static   string [] sPathTemplate  =   new   string []{ 
            
" /Themes/{0}/{1}/{2}.aspx " ,
            
" /Themes/{0}/Shared/{1}.Master " };

         private static ThemeController m_ThemeController = new  ThemeController();

        
public   static  ViewResult View( string  sTheme,  string  sController,  string  sView,  string  sMaster,  object  oModel)
        {
            
string  sViewPath  =   string .Format(sPathTemplate[ 0 ], sTheme, sController, sView);
            
string  sMasterPath  =   string .Format(sPathTemplate[ 1 ], sTheme, sMaster);

            
return m_ThemeController.View(sViewPath, sMasterPath, oModel);
        }

        
public   static  ViewResult View( string  sTheme,  string  sController,  string  sView,  object  oModel)
        { 
            
return  View(sTheme, sController, sView, " Site "  , oModel);
        }

        
public   static  ViewResult View( string  sTheme,  string  sController,  string  sView)
        {
            
string  sViewPath  =   string .Format(sPathTemplate[ 0 ], sTheme, sController, sView);
            
string  sMasterPath  =   string .Format(sPathTemplate[ 1 ], sTheme,  " Site " );

            
return  m_ThemeController.View(sViewPath, sMasterPath);
        }

        
// protected override ViewResult View(string viewName, string masterName, object model)
        
// {
        
//     if (viewName == null && model != null)
        
//         viewName = model.GetType().Name.ToLower().Replace("model", "view");
            
        
//     return base.View(viewName, masterName, model);
        
// }
    }

 

调用方法:

[HandleError]
public   class  HomeController : ThemeController
{
        
public  ActionResult Index()
        {
            
string  m_sTheme  =   " default " ; //默认的皮肤

            
if  (Request.QueryString[ " Theme " !=   null )
            {
                m_sTheme 
=  Request.QueryString[ " Theme " ];
            }

            ViewData[
" Message " =   " Welcome to ASP.NET MVC! " ;

            
return  View(m_sTheme,  " Home " " Index " );
        }

        
public  ActionResult About()
        {
            
return  View();
        }
}

 

显示效果:

 

自己觉得这是一个比较粗浅的解决方案,算是抛砖引玉吧,敬请多多拍砖!

 

附上源码!

 

更好的解决方案:重写视图引擎 附上源代码

 

 

 

转载于:https://www.cnblogs.com/DanielChow/archive/2010/05/30/1747696.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值