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/
  • 相关阅读:
    Javascript特效实现鼠标移动到小图,查看大图效果;
    Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
    Asp.Net技术的学习顺序
    Asp.net中用来代替Response.Write("<script>alert('错误信息');</script>");
    python测试例子
    基于socket 的web服务器检测
    python xml解析
    MySQLdb 简单说明
    python 实现简单的计算器
    XML SAX or DOM
  • 原文地址:https://www.cnblogs.com/DanielChow/p/1747696.html
Copyright © 2011-2022 走看看