千家信息网

如何使用Razor视图引擎名

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关如何使用Razor视图引擎名,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先,用到的Razor域名空间。usingSystem.Web
千家信息网最后更新 2026年11月02日如何使用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安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技有限公司 互联网科技社 互联网科技与金融科技 互联网金融与金融科技 四川狮子座互联网科技 美国互联网前沿科技 深圳前海聚择互联网科技有限公司 中国互联网有什么科技含量 南山科技园互联网公司有哪些 互联网金融中的现代科技 华夏互联网科技业 苏州铭阳互联网科技有限公司 迪庆互联网科技招生 佛山市拉法互联网科技有限公司 济南有互联网科技公司吗 每天都有哪些好的互联网科技 江苏苏星互联网科技有限公司 工业互联网科技成果转化 湖北辰鑫科技互联网 科技互联网专业工作会议发言稿 网络科技有限互联网 科技与互联网发展 互联网科技公司官网 成都互联网科技公司 上海喔噻互联网科技 成都玖崟互联网科技有限公司乐商圈怎么样 央行互联网金融科技公司 互联网经济与金融科技 互联网科技手机排行榜 科技互联网经济论坛
0