Exemplo n.º 1
0
        /// <summary>
        /// 渲染部分视图(重写此方法以实现自定义输出 partial 元素)
        /// </summary>
        /// <param name="partialElement">partial 元素</param>
        /// <returns></returns>
        protected virtual string RenderPartial(IHtmlElement partialElement)
        {
            var path = partialElement.Attribute("path").Value();
            var name = partialElement.Attribute("name").Value();

            try
            {
                if (!PartialExecutors.IsNullOrEmpty() && name != null)
                {
                    return(RenderNamedPartial(partialElement, name));
                }


                else if (path != null)
                {
                    return(RenderVirtualPath(path));
                }
            }
            catch //若渲染时发生错误
            {
                if (JumonyWebConfiguration.Configuration.IgnorePartialRenderException || partialElement.Attribute("ignoreError") != null)
                {
                    return("<!--parital render failed-->");
                }
                else
                {
                    throw;
                }
            }

            throw new NotSupportedException("无法处理的partial标签:" + ContentExtensions.GenerateTagHtml(partialElement, false));
        }
Exemplo n.º 2
0
        /// <summary>
        /// 渲染 partial 标签
        /// </summary>
        /// <param name="element">partial 标签</param>
        /// <param name="context">渲染上下文</param>
        protected override void Render(IHtmlElement element, HtmlRenderContext context)
        {
            var partialTag = ContentExtensions.GenerateTagHtml(element, true);

            ViewContext.HttpContext.Trace.Write("Jumony View Engine", string.Format("Begin Render Partial: {0}", partialTag));
            RenderPartial(element, context.Writer);
            ViewContext.HttpContext.Trace.Write("Jumony View Engine", string.Format("End Render Partial: {0}", partialTag));
        }
Exemplo n.º 3
0
            /// <summary>
            /// 渲染 partial 标签
            /// </summary>
            /// <param name="element">partial 标签</param>
            /// <param name="writer">用于渲染的文本编写器</param>
            public override void Render(IHtmlElement element, TextWriter writer)
            {
                var partialTag = ContentExtensions.GenerateTagHtml(element, true);

                _view.HttpContext.Trace.Write("Jumony for MVC", string.Format("Begin Render Partial: {0}", partialTag));
                _view.RenderPartial(element, writer);
                _view.HttpContext.Trace.Write("Jumony for MVC", string.Format("End Render Partial: {0}", partialTag));
            }
Exemplo n.º 4
0
        /// <summary>
        /// 渲染 partial 标签
        /// </summary>
        /// <param name="element">partial 标签</param>
        /// <param name="context">渲染上下文</param>
        protected override void Render(IHtmlElement element, IHtmlRenderContext context)
        {
            var partialTag = ContentExtensions.GenerateTagHtml(element, true);

            Trace(string.Format("Begin Render Partial: {0}", partialTag));
            RenderPartial(element, context.Writer);
            Trace(string.Format("End Render Partial: {0}", partialTag));
        }
Exemplo n.º 5
0
        /// <summary>
        /// 渲染部分视图
        /// </summary>
        /// <param name="partialElement">partial 元素</param>
        /// <returns></returns>
        protected virtual string RenderPartial(IHtmlElement partialElement)
        {
            var action  = partialElement.Attribute("action").Value();
            var view    = partialElement.Attribute("view").Value();
            var path    = partialElement.Attribute("path").Value();
            var handler = partialElement.Attribute("handler").Value();


            var helper = MakeHelper();


            try
            {
                if (action != null)//Action 部分视图
                {
                    var controller  = partialElement.Attribute("controller").Value() ?? (string)RouteData.Values["controller"];
                    var routeValues = GetRouteValues(partialElement);

                    return(helper.Action(actionName: action, controllerName: controller, routeValues: routeValues).ToString());
                }

                else if (view != null)
                {
                    return(helper.Partial(partialViewName: view).ToString());
                }

                else if (path != null)
                {
                    if (!VirtualPathUtility.IsAppRelative(path))
                    {
                        throw new FormatException("path 只能使用应用程序根相对路径,即以 \"~/\" 开头的路径,调用 VirtualPathUtility.ToAppRelative 方法或使用 HttpRequest.AppRelativeCurrentExecutionFilePath 属性获取");
                    }

                    var content = HtmlProviders.LoadContent(HttpContext, path);
                    if (content != null)
                    {
                        return(content.Content);
                    }
                }
            }
            catch (ThreadAbortException)
            {
            }
            catch //若渲染时发生错误
            {
                if (MvcEnvironment.Configuration.IgnorePartialRenderException || partialElement.Attribute("ignoreError") != null)
                {
                    return("<!--parital view render failed-->");
                }
                else
                {
                    throw;
                }
            }

            throw new NotSupportedException("无法处理的partial标签:" + ContentExtensions.GenerateTagHtml(partialElement, false));
        }
Exemplo n.º 6
0
        /// <summary>
        /// 渲染部分视图(重写此方法以实现自定义输出 partial 元素)
        /// </summary>
        /// <param name="partialElement">partial 元素</param>
        /// <returns></returns>
        protected override string RenderPartial(IHtmlElement partialElement)
        {
            var action = partialElement.Attribute("action").Value();
            var view   = partialElement.Attribute("view").Value();
            var path   = partialElement.Attribute("path").Value();
            var name   = partialElement.Attribute("name").Value();

            if (name != null)
            {
                return(RenderNamedPartial(partialElement, name));
            }

            var helper = MakeHelper();


            try
            {
                if (action != null)//Action 部分视图
                {
                    var routeValues = Url.GetRouteValues(partialElement);

                    return(RenderAction(partialElement, action, partialElement.Attribute("controller").Value(), routeValues));
                }

                else if (view != null)
                {
                    return(RenderPartial(partialElement, view));
                }

                else if (path != null)
                {
                    RenderVirtualPath(path);
                }
            }

            catch (ThreadAbortException)
            {
                throw;//不应屏蔽异常
            }

            catch //若渲染时发生错误
            {
                if (MvcEnvironment.Configuration.IgnorePartialRenderException || partialElement.Attribute("ignoreError") != null)
                {
                    return("<!--parital view render failed-->");
                }
                else
                {
                    throw;
                }
            }

            throw new NotSupportedException("无法处理的partial标签:" + ContentExtensions.GenerateTagHtml(partialElement, false));
        }
Exemplo n.º 7
0
        /// <summary>
        /// 渲染部分视图(重写此方法以实现自定义输出 partial 元素)
        /// </summary>
        /// <param name="partialElement">partial 元素</param>
        /// <returns></returns>
        protected virtual string RenderPartial(IHtmlElement partialElement)
        {
            var action  = partialElement.Attribute("action").Value();
            var view    = partialElement.Attribute("view").Value();
            var path    = partialElement.Attribute("path").Value();
            var handler = partialElement.Attribute("handler").Value();
            var name    = partialElement.Attribute("name").Value();

            if (!_partialExecutors.IsNullOrEmpty() && name != null)
            {
                var executor = _partialExecutors.FirstOrDefault(e => e.Name.EqualsIgnoreCase(name));
                if (executor != null)
                {
                    var wrapper = ViewHandler as IHandlerWrapper;
                    if (wrapper != null)
                    {
                        return(executor.Execute(wrapper.Handler, partialElement));
                    }
                    else
                    {
                        return(executor.Execute(ViewHandler, partialElement));
                    }
                }
            }


            var helper = MakeHelper();


            try
            {
                if (action != null)//Action 部分视图
                {
                    var routeValues = Url.GetRouteValues(partialElement);

                    return(RenderAction(partialElement, action, partialElement.Attribute("controller").Value(), routeValues));
                }

                else if (view != null)
                {
                    return(RenderPartial(partialElement, view));
                }

                else if (path != null)
                {
                    if (!VirtualPathUtility.IsAppRelative(path))
                    {
                        throw new FormatException("path 只能使用应用程序根相对路径,即以 \"~/\" 开头的路径,调用 VirtualPathUtility.ToAppRelative 方法或使用 HttpRequest.AppRelativeCurrentExecutionFilePath 属性获取");
                    }

                    var content = HtmlProviders.LoadContent(path);
                    if (content != null)
                    {
                        return(content.Content);
                    }
                }
            }
            catch (ThreadAbortException)
            {
            }
            catch //若渲染时发生错误
            {
                if (MvcEnvironment.Configuration.IgnorePartialRenderException || partialElement.Attribute("ignoreError") != null)
                {
                    return("<!--parital view render failed-->");
                }
                else
                {
                    throw;
                }
            }

            throw new NotSupportedException("无法处理的partial标签:" + ContentExtensions.GenerateTagHtml(partialElement, false));
        }