如何使用Razor视图引擎名
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章将为大家详细讲解有关如何使用Razor视图引擎名,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先,用到的Razor域名空间。usingSystem.Web
千家信息网最后更新 2025年02月07日如何使用Razor视图引擎名
这篇文章将为大家详细讲解有关如何使用Razor视图引擎名,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
首先,用到的Razor域名空间。
usingSystem.Web.Razor; usingSystem.Web.Razor.Generator; usingSystem.Web.Razor.Parser;
第一步,动态编译:解析视图文件,生成代码,是的,生成代码,先。Razor的语法可以说是私有语法,需要先生成标准代码,然后才编译,生成我们熟悉的C#类Type。需要注意的是,我下面代码用的模板基类是我自己的TeamplateBase,后面会给出简单实现,当然,好处就是灵活性。你也可以直接用Asp.NetMVC的System.Web.Mvc.WebViewPage,不过我没有试过,也许会有其他问题,不能保证。
publicstaticTypeCompile(stringtemplate_path) { //准备临时类名,读取模板文件和Razor代码生成器 varclass_name="c"+Guid.NewGuid().ToString("N"); varbase_type=typeof(TemplateBase<>).MakeGenericType(typeof(T)); vartemplate=File.ReadAllText(template_path); varhost=newRazorEngineHost(newCSharpRazorCodeLanguage(),()=> newHtmlMarkupParser()) { DefaultBaseClass=base_type.FullName, DefaultClassName=class_name, DefaultNamespace="YourNameSpace.dynamic", GeneratedClassContext= newGeneratedClassContext("Execute","Write", "WriteLiteral","WriteTo", "WriteLiteralTo", "YourNameSpace.TemplateBase") }; host.NamespaceImports.Add("System"); host.NamespaceImports.Add("YourNameSpaces"); //生成代码 CodeCompileUnitcode; using(varreader=newStringReader(template)){ vargeneratedCode=newRazorTemplateEngine(host).GenerateCode(reader); code=generatedCode.GeneratedCode; } //准备编译参数 var@params=newCompilerParameters { IncludeDebugInformation=false, TempFiles=newTempFileCollection(AppDomain.CurrentDomain .DynamicDirectory), CompilerOptions="/target:library/optimize", GenerateInMemory=false }; varassemblies=AppDomain.CurrentDomain .GetAssemblies() .Where(a=>!a.IsDynamic) .Select(a=>a.Location) .ToArray(); @params.ReferencedAssemblies.AddRange(assemblies); //编译 varprovider=newCSharpCodeProvider(); varcompiled=provider.CompileAssemblyFromDom(@params,code); if(compiled.Errors.Count>0){ varcompileErrors=string.Join("rn",compiled.Errors.Cast() .Select(o=>o.ToString())); thrownewApplicationException("FailedtocompileRazor:"+ compileErrors); } //编译成功后,返回编译后的动态Type returncompiled.CompiledAssembly.GetType("Skight.Arch.Presentation.Web.Core .ViewEngins.Razor.dynamic."+class_name); }
怎样使用Razor视图引擎名
第二步就简单多了,就和任何静态类一样,用反射创建实例,然后复制Model对象执行模板,最后输出结果是,就自动吧Model类的数据嵌入了。
publicstaticstringRender(Tmodel,stringtemplate_path) { vartype=Compile(template_path); //创建视图实例 varinstance=(TemplateBase)Activator.CreateInstance(type); //执行模板(把数据嵌入文件) instance.Model=model; instance.Execute(); //输出最终结果 varresult=instance.Result; returnresult; }
最后,看看视图模板类,一个基类和一个泛型基类,后者用于前类型Model
publicabstractclassTemplateBase { publicstringLayout{get;set;} publicUrlHelperUrl{get;set;} publicFuncRenderBody{get;set;} publicstringPath{get;internalset;} publicstringResult{get{returnWriter.ToString();}} protectedTemplateBase() { } publicTextWriterWriter { get { if(writer==null) {writer=newStringWriter(); } returnwriter; } set{ writer=value; } } privateTextWriterwriter; publicvoidClear(){ Writer.Flush(); } publicvirtualvoidExecute(){} publicvoidWrite(object@object){ if(@object==null){ return; } Writer.Write(@object); } publicvoidWriteLiteral(string@string){ if(@string==null){ return; } Writer.Write(@string); } publicstaticvoidWriteLiteralTo(TextWriterwriter,stringliteral){ if(literal==null){ return; } writer.Write(literal); } publicstaticvoidWriteTo(TextWriterwriter,objectobj){ if(obj==null){ return; } writer.Write(obj); } } publicabstractclassTemplateBase:TemplateBase { publicTModel{get;set;} }
关于"如何使用Razor视图引擎名"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
视图
代码
生成
编译
模板
引擎
文件
篇文章
动态
实例
数据
更多
结果
语法
准备
输出
不错
实用
成功
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
贵阳捉鸡麻将软件开发商
软件开发时 基于
数据库中间件比较
小米2a微信服务器连接不上
数据库公理系统三条推论
创新富民 网络安全
世界时间表软件开发
福建微型软件开发网上价格
湖北良好软件开发品质保障
中心电子计算机或服务器
邯郸市网络技术
网络安全努力破除 思维
新乡市尚映网络技术
中国网络安全的重要守护者
立法 网络安全 发展 平衡
faker其他服务器id
在日本用的地图软件开发
服务器审计软件
服务器的控制面板
dns服务器怎么工作
知网数据库连接符
网络安全问题与产品
数据库创建完整性约束条件
诺亚之心最新服务器
可移动服务器
对网络安全的科普
大学生网络安全教育论文前言
魅蓝2音乐服务器超时
网络技术速成
财务软件开发难吗