当前位置: 首页 > news >正文

asp.net mvc 重新引导视图路径,改变视图路径

asp.net mvc 重新引导视图路径,改变视图路径

使用指定的控制器上下文和母版视图名称来查找指定的视图

通过本文学习,你可以根据该技法,去实现,站点自定义皮肤,手机站和电脑站,其他设备站点,在不同的环境下,调取不同的视图模板。

源码下载地址:https://download.csdn.net/download/cplvfx/89010387

 

第一步:新建视图文件夹

在站点根目录新建【Views2】视图文件夹,

新建【Home】文件夹,

新建视图文件【Index.cshtml】和【_top.cshtml】

在【Views2】文件夹下新建【Web.config】文件

Index.cshtml 文件内容

@{Layout = null;
}<!DOCTYPE html><html>
<head><meta name="viewport" content="width=device-width" /><title>Views2下的Index</title>
</head>
<body><div><h1>Views2下的Index</h1>@Html.Partial("_top")</div>
</body>
</html>

_top.cshtml 文件内容


<h1>Views2下的_top.cshtml</h1>

Web.config 文件内容

我这里是直接项目默认的Views文件夹下的Web.config文件;

如下图

<?xml version="1.0"?><configuration><configSections><sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"><section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /><section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /></sectionGroup></configSections><system.web.webPages.razor><host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /><pages pageBaseType="System.Web.Mvc.WebViewPage"><namespaces><add namespace="System.Web.Mvc" /><add namespace="System.Web.Mvc.Ajax" /><add namespace="System.Web.Mvc.Html" /><add namespace="System.Web.Optimization"/><add namespace="System.Web.Routing" /><add namespace="WebViewTest" /></namespaces></pages></system.web.webPages.razor><appSettings><add key="webpages:Enabled" value="false" /></appSettings><system.webServer><handlers><remove name="BlockViewHandler"/><add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /></handlers></system.webServer><system.web><compilation><assemblies><add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /></assemblies></compilation></system.web>
</configuration>

新建好后的目录文件如下

第二步:新建视图引擎

在跟目录下新建【ViewsTools】文件夹

在该文件夹下面新建【ThemeRazorViewEngine】类文件

在该文件夹下面新建【ThemeVirtualPathProviderViewEngine】类文件

如图:

ThemeRazorViewEngine.cs文件内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;namespace WebViewTest.ViewsTools
{public class ThemeRazorViewEngine: ThemeVirtualPathProviderViewEngine{/// <summary>/// 创建Razor视图/// </summary>protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath){return new RazorView(controllerContext, viewPath, masterPath, true, FileExtensions);}/// <summary>/// 创建Razor分部视图/// </summary>protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath){return new RazorView(controllerContext, partialPath, null, false, FileExtensions);}}
}

ThemeVirtualPathProviderViewEngine.cs文件内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;namespace WebViewTest.ViewsTools
{/// <summary>/// 主题视图引擎/// </summary>public abstract class ThemeVirtualPathProviderViewEngine : VirtualPathProviderViewEngine{/// <summary>/// 使用指定的控制器上下文和母版视图名称来查找指定的视图/// </summary>/// <param name="controllerContext">控制器上下文</param>/// <param name="viewName">视图的名称</param>/// <param name="masterName">母版视图的名称</param>/// <param name="useCache">若为 true,则使用缓存的视图</param>/// <returns>页视图</returns>public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache){//构建一个视图引擎结果ViewEngineResult result = new ViewEngineResult(CreateView(controllerContext, $"~/Views2/Home/{viewName}.cshtml", string.Empty), this); return result;}/// <summary>/// 寻找分部视图的方法/// </summary>/// <param name="controllerContext">控制器上下文</param>/// <param name="partialViewName">分部视图的名称</param>/// <param name="useCache">若为 true,则使用缓存的分部视图</param>/// <returns>分部视图</returns>public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache){//构建一个分部视图引擎结果ViewEngineResult result = new ViewEngineResult(CreatePartialView(controllerContext, $"~/Views2/Home/{partialViewName}.cshtml"), this);return result;}}
}

第三步:修改Global.asax

增加下面代码

//将默认视图引擎替换为ThemeRazorViewEngine引擎
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new ThemeRazorViewEngine());

修改后的完整代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using System.Web.Security;
using System.Web.SessionState;
using WebViewTest.ViewsTools;namespace WebViewTest
{public class MvcApplication : System.Web.HttpApplication{protected void Application_Start(){//将默认视图引擎替换为ThemeRazorViewEngine引擎ViewEngines.Engines.Clear();ViewEngines.Engines.Add(new ThemeRazorViewEngine());AreaRegistration.RegisterAllAreas();GlobalConfiguration.Configure(WebApiConfig.Register);FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}}
}

第四步:运行预览

修改前的首页

修改后的首页

http://www.lryc.cn/news/323700.html

相关文章:

  • 《优化接口设计的思路》系列:第九篇—用好缓存,让你的接口速度飞起来
  • 专业130+总分410+西南交通大学924信号与系统考研经验西南交大电子信息通信工程,真题,大纲,参考书。
  • MySQL数据库 - 存储引擎
  • 时序预测 | Matlab基于BiTCN-LSTM双向时间卷积长短期记忆神经网络时间序列预测
  • Spring Cloud Alibaba Sentinel 使用详解
  • android gdb 调试
  • 分布式搜索引擎elasticsearch专栏二
  • LeetCode第一天(495.提莫攻击)
  • SQL运维_Unix下MySQL-8.0.18配置文件示例
  • python_BeautifulSoup爬取汽车评论数据
  • 24.2 SpringCloud电商进阶开发
  • ES6—Module 的语法
  • GitHub gpg体验
  • 鸿蒙一次开发,多端部署(十一)交互归一
  • 基于python+vue文学名著分享系统的设计与实现flask-django-nodejs-php
  • [音视频学习笔记]七、自制音视频播放器Part2 - VS + Qt +FFmpeg 写一个简单的视频播放器
  • LeetCode每日一题——x 的平方根
  • 2024.3.22 ARM
  • 【Linux】信号的处理{信号处理的时机/了解寄存器/内核态与用户态/信号操作函数}
  • webgl浏览器渲染设置
  • 【国家计算机二级C语言】高分笔记
  • Java项目:71 ssm基于ssm+vue的外卖点餐系统+vue
  • Alibaba spring cloud Dubbo使用(基于Zookeeper或者基于Nacos+泛化调用完整代码一键启动)
  • Word为图表设置图注并在图表清单中自动生成
  • 新建maven项目中遇到的问题
  • 【剑指offer】24. 机器人的运动范围(java选手)
  • CMU 10-414/714: Deep Learning Systems --hw3
  • 前端小白的学习之路(lessscss)
  • 算法体系-15 第十五节:贪心算法(下)
  • 2.10 模型评估的方法有哪些?优缺点