当前位置 > 首页 > Asp.net

ASP.NET MVC 实现多模版的方法

2012-9-26 12:53:00来源: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;

 2 using System.IO;
 3 using System.Web.Compilation;
 4 using System.Web.Mvc;
 5 using System.Web.WebPages;
 6 
 7 namespace System.Web.Mvc
 8 {
 9     public class ThemeRazorView : IView
10     {
11         private string template;  //模版的目录名称 
12 
13         public ThemeRazorView(string _template)
14         {
15             this.template = _template;
16         }
17 
18         public void Render(ViewContext viewContext, TextWriter writer)
19         {
20             //这个地方可以自己实现,或者从 web.config 里读取,或者从用户选择的模版中读取
21             if (template.IsNullOrEmpty())
22             {
23                 template = "Default";
24             }
25             string viewPath = "~/templates/" + template + "/" + viewContext.RouteData.GetRequiredString("controller") + "/" + viewContext.RouteData.GetRequiredString("action") + ".cshtml";
26 
27             Type viewType = BuildManager.GetCompiledType(viewPath);
28             var page = Activator.CreateInstance(viewType) as WebViewPage;
29            
30             page.VirtualPath = viewPath;
31             page.ViewContext = viewContext;
32             page.ViewData = viewContext.ViewData;
33         &nbs

  • ASP.NET MVC Series: Controladores, Acciones y Resultado de Acciones

    2009-4-13 13:00:00

    Estimados Amig@s : Por fin, la realidad tuve serios problemas para poder publicar este video...

  • LINQ to XML Quick Brain Dump

    2009-8-26 5:53:00

    LINQ to XML is a simple toolset that allows developers to easily interact with XML, whether it be i

  • Secret Server goes to Microsoft TechEd 2007 in Orlando

    2007-5-9 23:01:00

    This will be the first year that Thycotic has a vendor booth at Microsoft TechEd . This is an ex

  • Introducing Telerik Extensions for ASP.NET MVC

    2009-8-12 18:38:00

    Today, we have released our first public community technology preview of our ASP.NET MVC Extensions

  • Silverlight 1.1的海报

    2007-5-9 22:59:00

    相信大家在五一的时候,都已经知道了Silverlight的消息,其实在此之前,开心也曾经介绍过相关的信息,只不过有一些比较详细的信息没有说而已。 今天,除了大家可以使用SDK来体验Silverl

  • 发布个SqlSiteMapProvider组件

    2007-4-27 23:43:00

    该组件用于实现基于SQLServer的站点导航提供程序. 使用方法: 1.引用SqlSiteMapProvider.dll. 2.新建个类,取名为MySqlSiteMapProvider,继

  • <推荐>65个以自然风光为背景的UI设计

    2010-1-8 19:46:00

    阅读: 0 评论: 0 作者: 灵动生活 发表于 2010-01-08 19:35 原文链接 以自然风光为背景的设计是当前 UI 设计是趋势。在平时浏览网站的时候,也许你会不经意间

  • 也说创业·准备

    2007-3-14 11:54:00

    摘要: 你觉得视频网站前景怎么样? 坦白说,我觉得现在的视频网站都是跟风,看到Google收购了Youtube,大家一下子都起来做视频。就像最初的时候做门户一样。国内和国外不一样,现在国内能有多少

  • Uploaded ASP Classic Compiler Version 0.5.6.34834 to http://aspclassiccompiler.codeplex.com

    2009-12-1 14:27:00

    With feedbacks from several enthusiastic users, I have fixed many little bugs. Give the latest vers

  • Biztalk中Host Instance线程控制

    2009-8-17 4:00:00

    摘要: 最近项目中遇到这样的需求,biztalk需要通过FTP adapter到合作伙伴的FTP服务器上取文件,并且在同一个FTP服务器上有多个路径取不同类型的数据,这样biztalk接收端就要建立