当前位置 > 首页 > 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 网站组件CYQ.IIS发布--网站项目展示必备工具

    2011-6-23 16:15:00

    前言: 曾经,为了让 秋色园 更方便的在本地运行部署,辛苦写了一个“秋色园 QBlog 博客一键安装工具技术实现[附源码下载]”。 不过这个工具也有一些不

  • Basic usage of the new Visual WebGui Theme & Control designer

    2009-4-19 17:35:00

    In this How to we are going to learn the basic usage of Visual WebGui RIA Platform Theme & Co

  • LambdaParser:解析字符串为Lambda表达式并编译为委托

    2009-6-10 20:39:00

    最近刚刚离了职,便休息一会做点自己想做的事,于是花点时间写了这个 解析字符串为Lambda表达式并编译为委托 的模块:LambdaParser。 介绍 先举个最简单的例子让大家明白Lam

  • 防范SQL注入

    2007-4-1 13:22:00

    防范 SQL 注入 文苗 SQL 注入还是很流行和普遍,随着 web 程序的风行,甚至有愈演愈烈之势。 关于

  • 为你的UML模型添加颜色

    2007-8-25 2:26:00

    为什么要给UML模型添加颜色呢?在《Java Modeling in color with UML》(JMCU)一书中说,颜色给我们封装附加信息层的方法,这说明添加颜色可以增加我们表达信息的数量。

  • Microsoft AJAX Library + ADODB = ?

    2007-2-6 0:36:00

    最近做了一个基于Web的纯桌面端数据库应用,非常轻量级的,在挑选库的时候最后还是选择了自己熟悉的 Microsoft AJAX Library ,而没有使用prototype、dojo、YUI之类的

  • 体验微软Pivot浏览器——UX新体验

    2009-12-26 10:35:00

    阅读: 516 评论: 6 作者: Tony Qu 发表于 2009-12-26 07:14 原文链接 作者:Tony Qu   今天收到了Pivot浏览器的邀请函

  • [SqlServer]数据库中自定义拆分字符串函数Split()

    2007-8-18 15:08:00

    摘要: 经常我们要用到批量操作时都会用到字符串的拆分,郁闷的是SQL Server中却没有自带Split函数,所以我们只能自己动手来解决一下。为了减少和数据库的通讯次数,我们都会利用这种方法

  • Asp.net大型项目实践系列 第二季

    2011-11-17 14:30:00

      2年前心血来潮 写了 Asp.Net大型项目实践系列 ,得了园子里很多朋友的关注和宝贵意见。时隔2年无论是工作和生活都发生了很多变化,唯一没有变的是对技术的热情。回过头看,之前写的那个系列和

  • Silverlight 的导航框架与动态加载

    2009-10-24 18:41:00

    摘要: 本文讨论 Silverlight 3 内置的导航框架与动态加载 xap 文件相结合时遇到的问题、原因、与解决方法。 作者资料: Beginor 我的主页 个人资料