中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Razor視圖引擎名

發布時間:2021-09-23 14:43:44 來源:億速云 閱讀:118 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關如何使用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視圖引擎名”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

弋阳县| 蓝田县| 黄冈市| 进贤县| 大连市| 无棣县| 兰考县| 岑溪市| 南丹县| 奉贤区| 满洲里市| 马山县| 巴林左旗| 玉山县| 正安县| 宕昌县| 健康| 临安市| 龙井市| 丹江口市| 上虞市| 东乡族自治县| 南木林县| 巴彦县| 清徐县| 麦盖提县| 康马县| 涟源市| 轮台县| 西盟| 肃南| 镇远县| 罗城| 合阳县| 青川县| 青海省| 广州市| 明水县| 红河县| 新安县| 沙田区|