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