/// <summary> /// Finds the specified partial view by using the specified controller context. /// </summary> /// <returns> /// The partial view. /// </returns> /// <param name="controllerContext">The controller context.</param><param name="partialViewName">The name of the partial view.</param><param name="useCache">true to specify that the view engine returns the cached view, if a cached view exists; otherwise, false.</param> public ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache) { Template.FileSystem = _fileSystem.GetFileSystem(this.Extensions); var view = _viewLocator.LocatePartialView(partialViewName); if (view.SearchedLocations != null) { return(new ViewEngineResult(view.SearchedLocations)); } return(new ViewEngineResult(new DotLiquidView(controllerContext, _viewLocator, view), this)); }
public void Render(ViewContext viewContext, TextWriter writer) { if (viewContext == null) { throw new ArgumentNullException("viewContext"); } // Copy data from the view context over to DotLiquid var localVars = new Hash(); if (viewContext.ViewData.Model != null) { var model = viewContext.ViewData.Model; if (model is ILiquidizable) { model = ((ILiquidizable)model).ToLiquid(); } if (model is Hash) { localVars = model as Hash; } else if (model is IDictionary <string, object> ) { var modelDictionary = model as IDictionary <string, object>; foreach (var item in modelDictionary.Keys) { localVars.Add(item, modelDictionary[item]); } } } foreach (var item in viewContext.ViewData) { localVars.Add(Template.NamingConvention.GetMemberName(item.Key), item.Value); } foreach (var item in viewContext.TempData) { localVars.Add(Template.NamingConvention.GetMemberName(item.Key), item.Value); } var renderParams = new RenderParameters { LocalVariables = Hash.FromDictionary(localVars) }; var template = GetTemplateFromFile(this.ViewResult); if (this.MasterViewResult == null) { template.RenderWithTracing(writer, renderParams); } else // add master { var renderedContents = template.RenderWithTracing(renderParams); // read layout from context var layout = template.Registers["layout"].ToNullOrString(); var layoutPath = layout == null ? this.MasterViewResult : _locator.LocateView(layout); // render master with contents var masterTemplate = GetTemplateFromFile(layoutPath); var headerTemplate = GetTemplateFromFile(_locator.LocatePartialView("content_header")); var renderedHeaderContents = headerTemplate.RenderWithTracing(renderParams); renderParams.LocalVariables.Add("content_for_layout", renderedContents); renderParams.LocalVariables.Add("content_for_header", renderedHeaderContents); masterTemplate.RenderWithTracing(writer, renderParams); } }