如何使用Razor视图引擎名
发表于:2024-10-13 作者:千家信息网编辑
千家信息网最后更新 2024年10月13日,这篇文章将为大家详细讲解有关如何使用Razor视图引擎名,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先,用到的Razor域名空间。usingSystem.Web
千家信息网最后更新 2024年10月13日如何使用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安全错误
数据库的锁怎样保障安全
数据库事务编程规范
我的世界在服务器怎样建家最安全
软件开发的团队合作
图书管理数据库下载
linux软件开发公司
钧通网络技术服务公司
网络安全能力证书
软件开发和及其自动化哪个好
互联网科技汽车食品
简单网络安全伴我行手抄报漫画
山东网络安全预算
网络安全展望2021
ivms4200服务器管理
网络技术补考好过吗
服务器端应用
1.17基岩版模组服务器
简述对网络安全的认识
服务器怎么找到安全组配置
win7网络安全模式进去
用友安装数据库
数据库截断自增量
与互联网有关科技创新
软件开发与软件测试
网络安全知识答题有什么用
ui设计应用的软件开发
互联网科技随着时间的发展而发展
软件开发防盗版
儿童网络安全行为口诀十条
蓝凌软件开发有限公司
我的世界电脑版 AC服务器ip