コード例 #1
0
        /// <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));
        }
コード例 #2
0
        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);
            }
        }