zoukankan      html  css  js  c++  java
  • 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();
            }
    }

    显示效果:

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

    附上源码!

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


    --------------------------------------------------------------------------
    Daniel Chow's Blog - 不管你在哪里,都要有一颗创业的心!
    http://www.cnblogs.com/DanielChow/
  • 相关阅读:
    Shiro基础
    Nginx+tomcat集群使用redis共享session
    小程序 wepy wx.createAnimation 向右滑动渐入渐出
    小程序util工具
    记错本~~
    小程序BindTap快速连续点击页面跳转多次
    微信小程序页面无法跳转
    CSS:font-family常用字体中英文对照
    git 常用指令
    js 获取数组重复的元素
  • 原文地址:https://www.cnblogs.com/DanielChow/p/1747696.html
Copyright © 2011-2022 走看看