/// <summary>
        /// Render a view from a model by using the razor syntax
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="viewPath"></param>
        /// <param name="model"></param>
        /// <returns></returns>
        public string Render <T>(string viewPath, T model)
        {
            if (string.IsNullOrEmpty(viewPath))
            {
                throw new ArgumentNullException(nameof(viewPath));
            }

            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var key    = $"{viewPath.ToLowerInvariant()}-{typeof(T)}";
            var engine = new RazorLightEngineBuilder()
                         .UseMemoryCachingProvider()
                         .Build();

            var    cacheResult = engine.TemplateCache.RetrieveTemplate(key);
            string result;

            if (cacheResult.Success)
            {
                result = engine.RenderTemplateAsync(cacheResult.Template.TemplatePageFactory(), model).Result;
            }
            else
            {
                var template = string.Join("",
                                           GetViewContent(viewPath)
                                           .Where(l => !l.Contains(typeof(T).ToString())));//Remove @model in the template razor cshtml

                result = engine.CompileRenderAsync(key, template, model).Result;
            }

            return(result);
        }
Exemplo n.º 2
0
        public static async Task <string> renderTemplate(string templateText, string templateName, object model)
        {
            var engine = new RazorLightEngineBuilder()
                         .UseMemoryCachingProvider()
                         .Build();

            // see if we've already built the template
            var cacheResult = engine.TemplateCache.RetrieveTemplate(templateName);

            if (cacheResult.Success)
            {
                return(await engine.RenderTemplateAsync(cacheResult.Template.TemplatePageFactory(), model));
            }
            else
            {
                return(await engine.CompileRenderAsync(key : templateName, content : templateText, model : model));
            }
        }
Exemplo n.º 3
0
                /// <summary>
                /// テンプレートファイル展開を行う
                /// </summary>
                /// <param name="TemplateString"></param>
                /// <param name="info"></param>
                /// <returns></returns>
                public static string TemplateExpansion(
                    string TemplateKey,
                    string TemplateString,
                    SiteInfos info)
                {
                    // NetCoreへの対応状況により
                    // 以下ライブラリに差し替えする
                    // https://github.com/toddams/RazorLight


                    // ToDo
                    // 暫定で一番簡単な方法で実装する。
                    // 別途パフォーマンス調整の方法があるハズ
                    var engine = new RazorLightEngineBuilder()
                                 // required to have a default RazorLightProject type,
                                 // but not required to create a template from string.
                                 .UseEmbeddedResourcesProject(typeof(Program))
                                 .UseMemoryCachingProvider()
                                 .Build();

                    var result = engine.CompileRenderStringAsync(TemplateKey, TemplateString, info);

                    result.Wait();

                    var cacheResult = engine.Handler.Cache.RetrieveTemplate(TemplateKey);

                    if (cacheResult.Success)
                    {
                        var templatePage = cacheResult.Template.TemplatePageFactory();
                        var tresult      = engine.RenderTemplateAsync(templatePage, info);

                        tresult.Wait();

                        var v = tresult.Result;

                        return(v);
                    }

                    return("");
                }
        private async Task <string> BuildEmailTemplate(Message model)
        {
            using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("BorovClub.EmailMessageNotification.cshtml");
            TextReader tr            = new StreamReader(stream);
            string     razorTemplate = tr.ReadToEnd();

            var engine =
                new RazorLightEngineBuilder().UseMemoryCachingProvider().UseFileSystemProject("C:/tor").Build();

            var    cacheResult = engine.Handler.Cache.RetrieveTemplate("UnreadMessageTemplate");
            string renderedTemplate;

            if (cacheResult.Success)
            {
                renderedTemplate = await engine.RenderTemplateAsync(cacheResult.Template.TemplatePageFactory.Invoke(), model);
            }
            else
            {
                renderedTemplate = await engine.CompileRenderStringAsync("UnreadMessageTemplate", razorTemplate, model);
            }

            return(renderedTemplate);
        }
Exemplo n.º 5
0
        static async Task Main(string[] args)
        {
            var engine = new RazorLightEngineBuilder()
                         .UseEmbeddedResourcesProject(typeof(Program))
                         .UseMemoryCachingProvider()
                         .Build();

            var template = "Hello, @Model.Bar";
            var model    = new Foo {
                Bar = "Bar"
            };

            // Each template must have a templateKey that is associated with it, so you can render the same template next time without recompilation
            const string key = "templateKey";

            string result = await engine.CompileRenderStringAsync(key, template, model);

            Console.WriteLine(result); // Hello, Bar

            var cacheResult = engine.Handler.Cache.RetrieveTemplate(key);

            if (cacheResult.Success)
            {
                var templatePage = cacheResult.Template.TemplatePageFactory();
                result = await engine.RenderTemplateAsync(templatePage, new Foo()
                {
                    Bar = "bar"
                });

                Console.WriteLine(result); // Hello, bar
            }

            await FileSourceTemplatesAsync();

            await EmbeddedResourceTemplatesAsync();
        }