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/
  • 相关阅读:
    MapReduce的自定义结果文件名OutputFormat
    MapReduce的Mapper端JOIN
    服务器配置 隐藏apache和php的版本
    mysqldump参数详细说明
    PHP漏洞全解(PHP安全性/命令注入/脚本植入/xss跨站/SQL注入/伪跨站请求/Session劫持/HTTP响应拆分/文件上传漏洞)
    apache nginx 通过 rewrite 设置 禁止执行PHP程序
    javascript 数组的知识整理
    is_uploaded_file函数引发的问题
    php 读取文件头部两个字节 判断文件的实际类型
    discuz 数据字典大全
  • 原文地址:https://www.cnblogs.com/DanielChow/p/1747696.html
Copyright © 2011-2022 走看看