MVC中更换皮肤应用的研究

现在有很多博客,微博,SNS等系统都有更换皮肤的功能,用户可以随心所欲的更换自己喜欢的主页皮肤,比如更换成蓝色格调,暖色格调等。从技术的角度来看,更换皮肤其实就是更换主页对应的CSS样式,所以实现该功能该功能的核心就是动态更改主页的CSS样式,另外要考虑到配置的方便,所以最好把皮肤的路径配置到web.config里。基于这样考虑,我们可以这样去处理:

 

 

1.配置web.config里的Skin路径:

 <appSettings>
    <!--//相对母版页Sie.Master的路径-->
    <add key="SKIN_PATH" value="。。/。。/Skin/{0}/" />
  </appSettings>

2.我们需要定义下Controllers的基类CtlBaseController

 

代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.Mvc;
using  System.Web.Mvc.Ajax;
using  System.Configuration;

namespace  Web.Base
{
    
public   class  CtlBaseController : Controller
    {
        
public   static   string  USER_SKIN  =   " Default " ;
        
public   static   string  USER_SKIN_PATH  =   string .Empty;
        
protected   override   void  OnActionExecuting(ActionExecutingContext filterContext)
        {
            
// 从Cookie中获取Skin,若Cookie中没有则从数据库中获取
             if  (Request.Cookies[ " SiteSkin " !=   null )
                USER_SKIN 
=  Request.Cookies[ " SiteSkin " ].Value;
            
else
                USER_SKIN 
=   " Default " ; // 数据库中获取

            USER_SKIN_PATH 
=   string .Format(ConfigurationManager.AppSettings[ " SKIN_PATH " ], USER_SKIN); // 皮肤路径

            
base .OnActionExecuting(filterContext);
        }

    }
}

 

 

3.所有的Controller都要继承CtlBaseController

代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.Mvc;
using  Web.Base;
using  System.Configuration;

namespace  Web.Controllers
{
    [HandleError]
    
public   class  HomeController : CtlBaseController
    {
        
public  ActionResult Index()
        {
            ViewData[
" Message " =   " Welcome to ASP.NET MVC! " ;
            
            
return  View();
        }

        
public  ActionResult ChangeSkin()
        {
            
// 把更改的皮肤保存到数据库中和Cookie中
             string  skin  =  Request.Form[ " ddSkin " ];
            
// 保存到数据库中。。。。
            
// ...................
            
// 保存到Cookie中
            HttpCookie mycookie  =   new  HttpCookie( " SiteSkin " );
            mycookie.Value 
=  skin;
            mycookie.Expires 
=  DateTime.Now.AddDays( 30 );
            Response.Cookies.Add(mycookie);
            
// 更改现有皮肤
            USER_SKIN  =  skin;
            USER_SKIN_PATH 
=   string .Format(ConfigurationManager.AppSettings[ " SKIN_PATH " ], USER_SKIN); // 皮肤路径
             return  View( " Index " );
        }

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

 

 

4.使用一个母版页就可以实现更换不同的皮肤,动态更新CSS样式路径,Site.Master代码如下:

 

代码
<% @ Master Language = " C# "  Inherits = " System.Web.Mvc.ViewMasterPage "   %>
<% @ Import Namespace = " Web.Base "   %>

<! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Strict//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd " >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head runat = " server " >
    
< title >< asp:ContentPlaceHolder ID = " TitleContent "  runat = " server "   /></ title >
    
< link href =<%= CtlBaseController.USER_SKIN_PATH %> Site.css rel = " stylesheet "  type = " text/css "   />
    
<%
        
        List
< SelectListItem >  skinlist  =   new  List < SelectListItem > ();        
        
bool  DefaultSelected  =   false ;
        
bool  RedSelected  =   false ;
        
        
if  (CtlBaseController.USER_SKIN  ==   " Default " )
            DefaultSelected 
=   true ;
        
else
            DefaultSelected 
=   false ;
        
        
if  (CtlBaseController.USER_SKIN  ==   " Red " )
            RedSelected 
=   true ;
        
else
            RedSelected 
=   false ;
        
        skinlist.Add(
new  SelectListItem { Text  =   " 蓝色 " , Value  =   " Default " , Selected  =  DefaultSelected });
        skinlist.Add(
new  SelectListItem { Text  =   " 红色 " , Value  =   " Red " , Selected  =  RedSelected });        
        ViewData[
" SkinList " =  skinlist;
        
    
%>
</ head >

< body >
    
< div  class = " page " >

        
< div id = " header " >
            
< div id = " title " >
                
< h1 > 我可以更换皮肤噢 !</ h1 >
            
</ div >
            
<% Html.BeginForm("ChangeSkin", "Home", FormMethod.Post, new { id = "form1" }); %>
            
< div id = " logindisplay " >
                
<%= Html.DropDownList( " ddSkin " , (List < SelectListItem > )ViewData[ " SkinList " ]) %>   & nbsp;  < input type = " submit "  name = " submit "  value = " 应用 "   />
            
</ div >  
            
<%  Html.EndForm();  %>
            
            
< div id = " menucontainer " >
            
                
< ul id = " menu " >               
                    
< li ><%=  Html.ActionLink( " Home " " Index " " Home " ) %></ li >
                    
< li ><%=  Html.ActionLink( " About " " About " " Home " ) %></ li >
                
</ ul >
            
            
</ div >
        
</ div >

        
< div id = " main " >
            
< asp:ContentPlaceHolder ID = " MainContent "  runat = " server "   />

            
< div id = " footer " >
            
</ div >
        
</ div >
    
</ div >
</ body >
</ html >

 

具体示例代码,可以点击此处下载

 

转载于:https://www.cnblogs.com/jiangrod/archive/2011/01/30/1947779.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值