/// <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); }
/// <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(); } }
/// <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)); }