首页 咨询中心 IT学堂
ASP.NET MVC环境下实现一个网站多个网站模板的方法
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; 
           
上一篇 网页flash透明代码让FLASH背景透明不挡住下拉菜单方法
上一篇 asp.net提取模板标签字符串变量正则表达式
本方链接: http://www.web258.cn/article/show/i1245.html
ARTICLE 相关推荐