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/
  • 相关阅读:
    对es6中Promise和async的理解
    js里面的map、filter、forEach、reduce、for in、for of等遍历方法
    浏览器怎么解析一个hmtl文档
    js获取浏览器版本
    js中的浅复制和深复制
    作为一个程序员,如何调试抓取跳转页面前发送的请求
    escape、unescape、encodeURIComponent、decodeURLComponent
    css超过一定长度显示省略号 强制换行
    gojs去除水印
    版本控制系统svn的超基础使用
  • 原文地址:https://www.cnblogs.com/DanielChow/p/1747696.html
Copyright © 2011-2022 走看看