解读ASP.NET 5 & MVC6系列(16):自定义View视图文件查找逻辑

FPGA高速收发器GTX接收通道实战:从眼图扫描到字节对齐的完整避坑指南 本文详细解析了FPGA高速收发器GTX接收通道的实战调试技巧,涵盖眼图扫描、PRBS检测器配置和字节对齐等关键步骤。通过真实案例展示如何优化均衡器参数、解决误码问题及实现稳定数据接收,特别适合面临高速信号完整性挑战的硬件工程师。文章重点介绍了GTX接收通道的调试方法,帮助读者避开常见设计陷阱。 阅读详情

之前MVC5和之前的版本中,我们要想对View文件的路径进行控制的话,则必须要对IViewEngine接口的FindPartialView或FindView方法进行重写,所有的视图引擎都继承于该IViewEngine接口,比如默认的RazorViewEngine。但新版本MVC6中,对视图文件的路径方式却不太一样了,目前有两种方式,一种是通过RazorViewEngine,另外一种是通过新特性IViewLocationExpander接口。

通过RazorViewEngine来控制View路径

在新版的RazorViewEngine中,该类提供了两个虚属性(AreaViewLocationFormats和ViewLocationFormats),可以用于重写控制,而不必再对FindPartialView或FindView方法进行重写,示例如下:

public class ThemeViewEngine : RazorViewEngine
{
    public ThemeViewEngine(IRazorPageFactory pageFactory,
        IRazorViewFactory viewFactory,
        IViewLocationExpanderProvider viewLocationExpanderProvider,
        IViewLocationCache viewLocationCache)
        : base(pageFactory,
                viewFactory,
                viewLocationExpanderProvider,
                viewLocationCache)
    {
    }

    public override IEnumerable<string> AreaViewLocationFormats
    {
        get
        {
            var value = new Random().Next(0, 1);
            var theme = value == 0 ? "Theme1" : "Theme2";  // 可通过其它条件,设置皮肤的种类
            return base.AreaViewLocationFormats.Select(f => f.Replace("/Views/", "/Views/" + theme + "/"));
        }
    }

    public override IEnumerable<string> ViewLocationFormats
    {
        get
        {
            var value = new Random().Next(0, 1);
            var theme = value == 0 ? "Theme1" : "Theme2";  // 可通过其它条件,设置皮肤的种类
            return base.ViewLocationFormats.Select(f => f.Replace("/Views/", "/Views/" + theme + "/"));
        }
    }
}

然后,通过修改MVcOptions的实例属性ViewEngines即可完成对视图引擎的替换,代码如下:

services.AddMvc().Configure<MvcOptions>(options =>
{
    options.ViewEngines.Clear();
    options.ViewEngines.Add(typeof(ThemeViewEngine));
});

这样,系统在查找视图文件的时候,就会按照新注册的ThemeViewEngine的逻辑来执行。

通过IViewLocationExpander来控制View路径

在MVC6中,微软还提供了另外一种新的方式来控制View文件的路径,那就是IViewLocationExpander接口,通过实现该接口即可实现自定义逻辑,并且也可以使用相关的上下文对象。示例如下:

public class ThemeViewLocationExpander : IViewLocationExpander
{
    public void PopulateValues(ViewLocationExpanderContext context)
    {
        var value = new Random().Next(0, 1);
        var theme = value == 0 ? "Theme1" : "Theme2";
        context.Values["theme"] = theme;
    }

    public virtual IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context,
                                                            IEnumerable<string> viewLocations)
    {
        return viewLocations.Select(f => f.Replace("/Views/", "/Views/" + context.Values["theme"] + "/"));
    }
}

在上述自定义的IViewLocationExpander中,实现了2个方法分别是PopulateValues和ExpandViewLocations,PopulateValues方法可以让我们想ViewLocationExpanderContext上下文中添加响应的键值对以便后续使用,通过,我们可以利用通过该上下文对象,来查找ActionContext和HttpContext对象,以便利用这些对象做响应的判断操作;而ExpandViewLocations方法,只会在没有View缓存或在View缓存里找不到对应key的View文件时才会调用该方法,在该方法内,我们可以动态返回视图的位置。

最后,我们在Startup.cs里通过修改RazorViewEngineOptions实例对象的ViewLocationExpanders属性,来实现注册目的,代码如下:

services.Configure<RazorViewEngineOptions>(options =>
{
    options.ViewLocationExpanders.Add(typeof(ThemViewLocationExpander));
});
ASP.NET 和 MVC6:自定义 View 视图查找逻辑 通常情况下,视图文件位于应用程序的 Views 文件夹中,并且与控制器的名称和操作方法的名称相对应。但是,有时候我们需要根据不同的需求来自定义视图的查找逻辑。通过实现自定义的视图位置扩展器,你可以修改默认的视图查找行为,以满足特定的需求。将视图文件存储在不同的位置:有时候,我们可能希望将视图文件存储在不同的位置,而不是默认的 Views 文件夹。使用不同的视图文件命名约定:默认情况下,视图文件的命名约定是基于控制器和操作方法的名称。方法中,我们构建了自定义视图文件夹的路径,并将其添加到视图查找路径中。 阅读详情

相关推荐

ASP.NET & MVC6系列:配置MvcOptions以适用于Android

ASP.NET是一种用于构建Web应用程序的开发框架,而MVC6是ASP.NET中的一个模式,用于将应用程序逻辑、数据和用户界面分离开来。请记住,根据您的具体要求,您可以根据MvcOptions的其他选项进行配置。要将MVC应用程序配置为适用于Android平台,我们可以使用MvcOptions类中的一些配置选项。在下面的示例中,我们将演示如何配置MvcOptions以适用于Android。这意味着当我们向服务器发送带有".json"扩展名的请求时,服务器将将其解析为JSON格式的数据。

techDM的博客 212

ASP.NET 5与MVC 6中的新特性

虽然人们的目光都专注于ASP.NET 5与跨平台的执行引擎上,但作为微软推荐的UI与Web Service框架,MVC也引入了多项变更。其中最重要的一点莫过于MVC、Web API与Web Pages三者的统一了。 差点忘了提一句,MVC 6中默认的渲染引擎Razor也将得到更新,以支持C# 6中的新语法。而Razor中的新特性还不只这一点。 在某些情况下,直接在Web页面中嵌入某些JSON数...

心雨楼 1029

ASP.NET MVC6.PDF

ASP.NET MVC 6 Documentation Release Microsoft March 02, 2016

从零开始学习ASP.NET CORE(十二)视图和自定义视图

视图和自定义视图

father6的博客 545

解读ASP.NET 5 &amp; MVC6系列教程(16):自定义View视图文件查找逻辑

主要介绍了ASP.NET 5 MVC6中自定义View视图文件查找逻辑,需要的朋友可以参考下

ASPNET MVC6源码

aspnet MVC6源码,可以部署跨平台应用,采用了微软最新的ASPNET core 来完成。终于可以走出IIS了。

ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API

ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用。 接下来几篇文章中您会了解以下内容: ASP.NET MVC 6 中创建简单的web API。 如何从空的项目模板中启动,及添加控件到应用中。 如何配置 ASP.NET 5.0 管道。 在 IIS 外对立部署应用。 本文的目的是从空的项目开始,逐步讲解如何创建应用。当然,您也可以从“St...

279

如何缩减layout电路面积?减少晶体管的数量——以全加器为例【VLSI】

How to reduce the number of transistors to reduce circuit area? -- Take the Binary Full Adder as an example 优化面积的方法 1. 减少晶体管的数量 2. 改变gate matrix的布局

Jie_MSD的博客 6429

解读ASP.NET 5 & MVC6系列

本系列的大部分内容来自于微软源码的阅读和网络,大部分测试代码都是基于VS RC版本进行测试的。 解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介 解读ASP.NET 5 & MVC6系列(2):初识项目 解读ASP.NET 5 & MVC6系列(3):项目发布与部署 解读ASP.NET 5 & MVC6系列(4):核心技术与环境配置 解读ASP.

dz45693的专栏 2639

展锐双摄帧同步实战:从配置到调试的完整避坑指南

本文深入剖析了在展锐平台上实现双摄帧同步的完整流程与核心技术。详细对比了硬件帧同步与软件帧同步的差异、应用场景及核心挑战,提供了从XML配置、驱动层适配到调试验证的实战指南。重点强调了硬件帧同步必须与固定帧率强绑定这一关键避坑点,并分享了针对景深虚化等场景的同步质量验证方法及长稳测试策略。

kiwi8的博客 401

STM32F4驱动ADS1220高精度ADC:从SPI配置到数据校准的完整实战指南

本文详细介绍了如何使用STM32F4微控制器驱动ADS1220高精度ADC,涵盖从SPI接口配置、寄存器设置到数据采集与校准的全过程。通过实战代码示例和硬件设计要点,帮助开发者快速构建高精度数据采集系统,适用于工业测量和精密仪器等应用场景。

weixin_26918763的博客 224

ASP.NET MVC 最好的视图引擎是什么?

在http://ASP.NETCore MVC应用程序中,视图引擎(view engine)负责处理发送给客户端的内容。MVC框架中默认的视图引擎称为Razor,用来为HTML文件添加注释说明并将这些动态内容插入发送给浏览器的输出中。 关于在具体语境中如何理解Razor,参见表5-1。 表5-1 在具体语境中理解Razor 表5-2列出了本章要完成的操作。 5.1 准备示例项目 为了演示Razor是怎样工作的,首先创建一个http://ASP.NETCore Web Applicati..

人邮异步社区 612

手把手教你用Keil5和Proteus8给51单片机跑个流水灯(附完整源码+安装包)

本文详细介绍了如何使用Keil5和Proteus8为51单片机实现流水灯效果,包括开发环境配置、汇编代码编写、电路设计及仿真调试。通过完整的源码和安装包,帮助初学者快速掌握C51单片机开发的核心流程,适合嵌入式开发入门学习。

weixin_42632434的博客 369

ASP.NET 5 & MVC6系列教程

本系列的大部分内容来自于微软源码的阅读和网络,大部分测试代码都是基于VS RC版本进行测试的。 解读ASP.NET 5 &amp;amp; MVC6系列(1):ASP.NET 5简介 解读ASP.NET 5 &amp;amp; MVC6系列(2):初识项目 解读ASP.NET 5 &amp;amp; MVC6系列(3):项目发布与部署 解读ASP.NET 5 &amp;amp; MVC6系列(4):核心技术与环境配置...

weixin_33778778的博客 667

SAP ABAP实战:用BAPI_PO_CREATE1创建采购订单时,如何巧妙处理PBXX和PB00条件类型?

本文深入探讨了在SAP ABAP开发中使用BAPI_PO_CREATE1创建采购订单时,如何有效处理PBXX和PB00条件类型的难题。通过分析外协加工订单的特殊需求,提供了从问题定位到解决方案的全流程方法,包括数据流向追踪、字段控制策略和增强实现方案,帮助开发者解决条件类型自动生成的业务痛点。

weixin_30614109的博客 823

OPPO 数据分析面试题及参考答案

如何设计共享单车数据库的各个字段? 对于共享单车的数据库设计,首先考虑用户相关的字段。用户表可以包含用户 ID,这是一个唯一标识符,用于区分不同用户;姓名,记录用户的真实姓名;联系方式,比如手机号码,方便在出现问题时联系用户;注册时间,记录用户何时开始使用共享单车服务;信用分数,用于衡量用户使用共享单车过程中的行为是否合规,比如是否按时归还车辆等。 车辆信息表要有车辆 ID,这是车辆的唯一标识;车辆类型,例如普通单车、电动单车等;投放时间,即车辆投放到市场的时间;车辆状态,包括是否可用(如正

大模型大数据攻城狮的专栏 1182

ASP.NET MVC

Visual Studio 2010 --MVC2.0 只有aspx视图引擎 Visual Studio 2012 --MVC3.0和MVC4.0 aspx和Razor视图引擎 Visual Studio 2013 --MVC4.0 aspx和Razor视图引擎 Visual Studio 2015 --MVC5.0 只有Razor视图引擎 MVC模式简介 MVC模式两种理解:...

angnienong7638的博客 742

【YoloV8改进策略】上采样改进|EUCB,轻量高效的上采样模块|即插即用

YOLOv8作为当前最先进的实时目标检测与实例分割模型之一,其在速度与精度之间取得了出色的平衡。然而,在资源受限的边缘设备或对实时性要求极高的应用场景中,YOLOv8的计算开销,尤其是在特征金字塔网络(FPN)和路径聚合网络(PAN)中用于特征融合的上采样操作,仍然是一个瓶颈。YOLOv8的颈部(Neck)结构中广泛使用nn.Upsample进行上采样,该操作虽然简单,但缺乏对特征内容的感知能力,且后续通常需要标准卷积来修复因插值带来的伪影,这增加了不必要的计算负担。

m0_47867638的博客 747
上一篇: Scaffold-DbContext
下一篇: Redis是单线程的,但Redis为什么这么快?
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值