• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETMVC环境下实现一个网站多个网站模板的方法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

asp.net mvc下实现多个网站模板的方法,让ASP。NET一个网站有多套网站模板,不用的场景下使用不用的mvc 模版。  比如有默认,红,蓝,绿几种网站模板,客户可以根据自己喜好选择自己喜欢的网站模板样子,

   

目录结构希望是  

/templates  

     Default  

     Blue  

     Red   

     .....   

当传入 “Blue” 参数的时候则调用 Blue 下面的View   

查看 return View().. 的参数,发现可以指定 一个 IView 。  

然后就有如下的代码。  

            RazorView rv = new RazorView(this.ControllerContext, "~/tempate/Blue/???.cshtml", null, true, new string[] { ".cshtml", ".vbcshtml" });  
            return View(rv);   

   

然后,就解决了路径的问题。   

执行,出错,不是正确的页面文件。   

这个错误解决方法很简单(但也浪费了我不少时间):  

把 /Views 下面的 web.config 拷贝到 /templates 下    

   

更好一点的解决方法:   

自己实现一个 IView。   

  1 using System;  

using System.IO;  
 using System.Web.Compilation;  
 using System.Web.Mvc;  
 using System.Web.WebPages;  
   
 namespace System.Web.Mvc  
 {  
     public class ThemeRazorView : IView  
     {  
         private string template;  //模版的目录名称   
   
         public ThemeRazorView(string _template)  
         {  
             this.template = _template;  
         }  
   
         public void Render(ViewContext viewContext, TextWriter writer)  
         {  
             //这个地方可以自己实现,或者从 web.config 里读取,或者从用户选择的模版中读取  
             if (template.IsNullOrEmpty())  
             {  
                 template = "Default";  
             }  
             string viewPath = "~/templates/" + template + "/" + viewContext.RouteData.GetRequiredString("controller") + "/" + viewContext.RouteData.GetRequiredString("action") + ".cshtml"; 
   
             Type viewType = BuildManager.GetCompiledType(viewPath);  
             var page = Activator.CreateInstance(viewType) as WebViewPage;  
              
             page.VirtualPath = viewPath;  
             page.ViewContext = viewContext;  
             page.ViewData = viewContext.ViewData;  
             page.InitHelpers();  
   
             WebPageContext pageContext = new WebPageContext(viewContext.HttpContext, null, null);  
             WebPageRenderingBase startPage = StartPage.GetStartPage(page, "_ViewStart", new string[] { "cshtml", "vbhtml" });  
   
             page.ExecutePageHierarchy(pageContext, writer, startPage);  
         }  
   
     }  
 }现在调用方法为:  

            return View(new ThemeRazorView("Blue")); 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap