[转载].NET MVC4 Razor 视图预编译

平时使用.NET MVC中不乏有类似的需求:某些razor视图,特别是系统后台的视图,不想让用户自行更改,需要通过某种方法把视图模板编译到项目的dll中去。

但是VS并不提供razor的预编译,如果需要对razor预编译需要借助第三方工具:Razor Generator

这里以VS2013为例

1,依次选择:工具---扩展和更新---左侧选择“联机”---搜索“RazorGenerator”,然后安装

2,对MVC项目中的Razor视图右键--属性--生成操作“无”,自定义工具“razorgenerator”,同时你会看到Razor页面被生成了.cs文件

(_ViewStart.cshtml跟_Layout.cshtml等布局视图除外...)

3,引用PrecompiledMvcViewEngineContrib

对项目引用点右键“管理Nuget程序包”联机查找“PrecompiledMvcViewEngineContrib”,然后添加引用

4,App_Start中添加一个类

?

public class ViewEngineStart

    {

        /// <summary>

        /// 初始化注册预编译视图

        /// </summary>

        public static void Start()

        {

            Assembly asm = Assembly.GetExecutingAssembly();

            var engine = new PrecompiledMvcEngine(new List<Assembly> {

                Assembly.Load("AppServer")

            });

            System.Web.Mvc.ViewEngines.Engines.Insert(0, engine);

            System.Web.WebPages.VirtualPathFactoryManager.RegisterVirtualPathFactory(engine);

        }

    }

然后,Global.asax的Application_Start中执行上面类的Start方法

ViewEngineStart.Start();

这里就在程序初始化的时候把视图注册到虚拟路径当中了,

最后发布项目,运行!你会发现Views里面你设置预编译的razor视图没有了,网站能够正常访问到页面!

有几个需要注意的地方(由于刚用这个预编译,也不是太熟,后面发现新用法会持续更新)

1、默认预编译默认只支持cshtml跟vbhtml,可以自己设置后缀,文件格式化路径

2、预编译的时候不要预编译_ViewStart.cshtml跟_Layout.cshtml

如果预编译了_ViewStart.cshtml,视图执行之前不会执行_ViewStart.cshtml,也就是说如果在_ViewStart.cshtml定义了Layout,这个页面会没有布局

如果预编译了_Layout.cshtml,你会发现访问页面时候报错提示找不到_Layout.cshtml

因为在预编译之后Layout只是一个属性,不会生成方法,如@Html.Partial都会生成Html.Partial(XXXX)方法,所以可能这里是导致Layout无效的原因!

3、页面单独定义Layout预编译后不会起作用,而且照旧会使用没有预编译的_ViewStart.cshtml里面定义的Layout 理由同上一段

所以如果项目的razor需要用到预编译,个人建议:

1、如果用到模板布局,只预编译使用默认_ViewStart.cshtml定义的模板的视图,单独使用不同模板的不去预编译(因为预编译后Layout会失效,依旧会调用_ViewStart.cshtml)定义的模板

2、如果每个页面相互独立都不需要用到模板,则可以全部预编译!

如果有发现怎么解决这两个文件预编译后能正常访问的欢迎留言!

作者:Я!ńɡ

转载自:http://www.cnblogs.com/263613093/p/4309515.html

时间: 2024-10-11 00:21:06

[转载].NET MVC4 Razor 视图预编译的相关文章

.NET MVC4 Razor视图预编译

在平时使用.NET MVC中会不会有这样子的需求:某些razor视图,特别是系统后台的视图,不想让用户自行更改或者是觉得razor执行效率不高,需要能够把razor预编译到dll文件中去提高执行效率!(道听途说,具体没测...) VS并不提供razor的预编译,如果需要对razor预编译需要借助第三方工具 SO,Let's Begin! 这里以VS2013为例 依次选择:工具---扩展和更新---左侧选择“联机”---搜索“RazorGenerator”,然后安装 2,对MVC项目中的Razor

.NET MVC Razor模板预编译(二)

在前面一片文章:<.NET MVC4 Razor视图预编译(一)> 里面我采用的是PrecompiledMvcViewEngineContrib组件进行预编译视图的虚拟地址注册,但是这个组件还是存在少许的bug,如:页面单独定义Layout预编译后不会起作用,而且照旧会使用没有预编译的_ViewStart.cshtml里面定义的Layout 昨天在NPOI作者Tony的群(群号:78142590)里面经过大神老衣的指点,原来是我引用的第三方类库错了,应该引用:RazorGenerator.Mv

asp.net mvc4 razor视图 (之) 继承,集成

隐藏了具体实现. 放在views/shared/_layout.cshtm 即为所有其他页面的父模板(template / masterpage) 页面继承(inherit/extend):页面继承通过@Html.RenderBody()/@Html.RenderSection('your_sec').继承方法如下: 页面集成(include):页面要加载其他控件(usercontrol/part),可调用 @Html.RenderPatial("your_partial_tempalte.cs

asp.net mvc4 razor视图 (之) 数据读取

@Html.Raw 或者直接访问,使用 Model属性. 参考这里:http://techo.luefher.com/coding/dot-net/mvc/how-to-access-your-model-data-in-net-mvc-with-razor-engine-for-beginners/ lambda表达式,类似这样: 数据从controller到view,因此如果要初始化,也是在controller里面进行,如下: asp.net mvc4 razor视图 (之) 数据读取

asp.net mvc4 razor视图 (之) 添加 所见即所得 富文本编辑框

原文地址:http://www.dotnetfunda.com/articles/show/2657/implementing-richtexteditor-or-wysiwyg-tinymce-in-aspnet-mvc 总结下: 通过"管理Nuget程序包"功能添加tinymce到专案. 然后对于需要变成wysiwyg的输入框添加属性,AllowHtml和UIHint即可,如下: [AllowHtml] [UIHint("tinymce_full_compressed&q

ASP.NET MVC5 视图预编译

关于Razor视图及引擎原理,就不多说了. 这里通俗或者不恰当地说,cshtml视图文件是先编译成dll文件,再通过视图引擎“解析”成html输出到浏览器. 但mvc编译cshtml是动态编译的,并缓存起来. 它到底缓存到哪里了?请看园子里的蒋金楠<ASP.NET MVC的Razor引擎:View编译原理>一文 ! 相信不少人想过:能不能把视图进行预(提前)编译? 一.这样是否可能提升网站程序运行性能(当然,和缓存起来相比的效果有待测试.)? 二.能预编译也就意味着不需要视图原始文件.目的:假

使用RazorGenerator和预编译MVC引擎将Razor视图编译成DLL

Web开发中常常会有跨页面.跨站点.跨项目组的复用模块(界面),最常见的就是如下方所示的Web页面上用于显示登录或用户名的头部模块, 使用ASP.NET MVC开发中,常见的做法是写成部分视图,本文的目的则是进一步将这部分视图预编译成DLL, 这样就可以不直接暴露源码的提供复用组件,适合跨项目组的协作开发. 技术点 Razor Generator(Razor单文件生产器) RazorGenerator.Mvc(Razor视图预编译引擎) 步骤一:安装拓展,项目准备 首先,为VS安装Razor G

体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图

这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件. 需要在 project.json 中添加如下配置: 1)在 "dependencies" 中添加: "Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Design": "1.1.0-preview4-final" 2)在"tools&quo

.Net Core Razor 预编译,动态编译,混合编译

预编译 预编译是ASP .Net Core的默认方式.在发布时,默认会将系统中的所有Razor视图进行预编译.编译好的视图DLL统一命名为 xxx.PrecompiledViews.dll 或者 xxx.Views.dll 动态编译 将项目整个配置成动态编译很简单,添加一个配置项目MvcRazorCompileOnPublish,值为false即可 <PropertyGroup> <MvcRazorCompileOnPublish>false</MvcRazorCompile