示例#1
0
        /// <summary>
        /// Renderiza o conteúdo.
        /// </summary>
        /// <param name="viewContext"></param>
        /// <param name="writer"></param>
        public void Render(System.Web.Mvc.ViewContext viewContext, System.IO.TextWriter writer)
        {
            if (IsRazorFile)
            {
                try
                {
                    var cache = _virtualFile as ITemplateCacheSupport;
                    RazorEngine.Templating.ITemplateKey templateKey = null;
                    if (cache != null)
                    {
                        if (cache.TemplateKey == null)
                        {
                            templateKey = EngineService.GetKey(_virtualFile.VirtualPath.ToLower(), RazorEngine.Templating.ResolveType.Include);
                            cache.Register(templateKey);
                        }
                        else
                        {
                            templateKey = cache.TemplateKey;
                        }
                    }
                    else
                    {
                        templateKey = EngineService.GetKey(_virtualFile.VirtualPath.ToLower(), RazorEngine.Templating.ResolveType.Include);
                    }
                    RazorEngine.Templating.DynamicViewBag viewBag = new CustomDynamicViewBag(viewContext.ViewData)
                    {
                        ViewContext = viewContext
                    };
                    var modelType = _model != null?_model.GetType() : null;

                    if (!EngineService.IsTemplateCached(templateKey, modelType))
                    {
                        try
                        {
                            EngineService.Compile(templateKey, modelType);
                        }
                        catch (Exception ex)
                        {
                            viewContext.HttpContext.Response.StatusCode = 501;
                            writer.Write(ex.ToString());
                            return;
                        }
                    }
                    EngineService.Run(templateKey, writer, modelType, null, viewBag);
                    return;
                }
                catch (Exception ex)
                {
                    viewContext.HttpContext.Response.StatusCode = 501;
                    writer.Write(ex.ToString());
                    return;
                }
            }
            using (var stream = _virtualFile.Open())
            {
                var reader = new System.IO.StreamReader(stream);
                writer.Write(reader.ReadToEnd());
                writer.Flush();
            }
        }
        public RazorEngine.Templating.ITemplateSource Resolve(RazorEngine.Templating.ITemplateKey key)
        {
            var viewName         = key.Name;
            var loadedAssemblies = Assembly.GetAssembly(typeof(EastFive.Api.Tests.TestSessionHelpers));
            var apiDllLocation   = new FileInfo(loadedAssemblies.Location);
            var apiProjectDir    = apiDllLocation.Directory
                                   .Parent
                                   .Parent
                                   .Parent
                                   .GetDirectories()
                                   .First(
                d =>
            {
                if (!d.Name.EndsWith(".Api"))
                {
                    return(false);
                }
                if (d.Name.StartsWith("EastFive"))
                {
                    return(false);
                }
                if (d.Name.StartsWith("Black"))
                {
                    return(false);
                }
                return(true);
            })
                                   .FullName;
            var viewFileInfo = new FileInfo(Path.Combine(apiProjectDir, viewName.TrimStart(new char[] { '\\', '~', '/' })));

            var    path    = viewFileInfo.FullName;
            string content = File.ReadAllText(path);

            return(new RazorEngine.Templating.LoadedTemplateSource(content, path));
        }
 /// <summary>
 /// Notifica que o template foi compilado para o arquivo.
 /// </summary>
 /// <param name="physicalPath"></param>
 /// <param name="templateKey"></param>
 public void NotifyTemplateCompiled(string physicalPath, RazorEngine.Templating.ITemplateKey templateKey)
 {
     lock (_razorTemplateKeys)
         if (!_razorTemplateKeys.ContainsKey(physicalPath))
         {
             _razorTemplateKeys.Add(physicalPath, templateKey);
         }
 }
 /// <summary>
 /// Remove o modelo.
 /// </summary>
 /// <param name="physicalPath"></param>
 /// <returns></returns>
 public RazorEngine.Templating.ITemplateKey GetTemplateKey(string physicalPath)
 {
     RazorEngine.Templating.ITemplateKey result = null;
     lock (_razorTemplateKeys)
         if (_razorTemplateKeys.TryGetValue(physicalPath, out result))
         {
             return(result);
         }
     return(result);
 }
 void Owin.Razor.ITemplateCacheSupport.Register(RazorEngine.Templating.ITemplateKey templateKey)
 {
     _directory.NotifyTemplateCompiled(_physicalPath, templateKey);
 }
示例#6
0
        /// <summary>
        /// Renderiza o conteúdo.
        /// </summary>
        /// <param name="viewContext"></param>
        /// <param name="writer"></param>
        public void Render(ViewContext viewContext, System.IO.TextWriter writer)
        {
            if (_virtualFile.Name.EndsWith(".cshtml", StringComparison.InvariantCultureIgnoreCase) || _virtualFile.Name.EndsWith(".html", StringComparison.InvariantCultureIgnoreCase))
            {
                try
                {
                    var cache = _virtualFile as ITemplateCacheSupport;
                    RazorEngine.Templating.ITemplateKey templateKey = null;
                    if (cache != null)
                    {
                        if (cache.TemplateKey == null)
                        {
                            templateKey = EngineService.GetKey(_virtualFile.VirtualPath.ToLower(), RazorEngine.Templating.ResolveType.Global);
                            cache.Register(templateKey);
                        }
                        else
                        {
                            templateKey = cache.TemplateKey;
                        }
                    }
                    else
                    {
                        templateKey = EngineService.GetKey(_virtualFile.VirtualPath.ToLower(), RazorEngine.Templating.ResolveType.Global);
                    }
                    var modelType = _model != null?_model.GetType() : null;

                    if (!EngineService.IsTemplateCached(templateKey, modelType))
                    {
                        try
                        {
                            EngineService.Compile(templateKey, modelType);
                        }
                        catch (Exception ex)
                        {
                            viewContext.HttpContext.Response.StatusCode = 501;
                            writer.Write(ex.ToString());
                            return;
                        }
                    }
                    RazorEngine.Templating.DynamicViewBag viewBag = new CustomDynamicViewBag(viewContext.ViewData)
                    {
                        ViewContext = viewContext
                    };
                    if (string.IsNullOrEmpty(viewContext.RequestContext.HttpContext.Response.ContentType))
                    {
                        string contentType = null;
                        if (!string.IsNullOrEmpty(contentType))
                        {
                            var path  = _virtualFile.VirtualPath;
                            var index = path.LastIndexOf('.');
                            if (index >= 0)
                            {
                                var extension = path.Substring(index);
                                contentType = Colosoft.Web.ExtendedHtmlUtility.TranslateContentType(extension);
                            }
                        }
                        viewContext.RequestContext.HttpContext.Response.ContentType = contentType;
                    }
                    EngineService.Run(templateKey, writer, modelType, _model, viewBag);
                    writer.Flush();
                    return;
                }
                catch (Exception ex)
                {
                    viewContext.HttpContext.Response.StatusCode = 501;
                    writer.Write(ex.ToString());
                    return;
                }
            }
            using (var stream = _virtualFile.Open())
            {
                var reader = new System.IO.StreamReader(stream);
                writer.Write(reader.ReadToEnd());
                writer.Flush();
            }
        }
示例#7
0
 /// <summary>
 /// Recupera a chave do modelo.
 /// </summary>
 /// <param name="name"></param>
 /// <param name="resolveType"></param>
 /// <param name="context"></param>
 /// <returns></returns>
 private RazorEngine.Templating.ITemplateKey GetKey(string name, RazorEngine.Templating.ResolveType resolveType = 0, RazorEngine.Templating.ITemplateKey context = null)
 {
     return(EngineService.GetKey(name, resolveType, context));
 }
 public void AddDynamic(RazorEngine.Templating.ITemplateKey key, RazorEngine.Templating.ITemplateSource source)
 {
     throw new NotImplementedException("dynamic templates are not supported!");
 }
 public RazorEngine.Templating.ITemplateKey GetKey(string name, RazorEngine.Templating.ResolveType resolveType, RazorEngine.Templating.ITemplateKey context)
 {
     return(new RazorEngine.Templating.NameOnlyTemplateKey(name, resolveType, context));
 }