/// <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)); }
public ActionResult PageViewer(string hash, string selector) { if (hash == null) { return(null); } Stopwatch watch = new Stopwatch(); watch.Start(); var document = HtmlProviders.LoadDocument("~/Content/" + hash + ".html"); watch.Stop(); if (document == null) { return(HttpNotFound()); } ViewData["Document"] = document; ViewData["Timespan"] = watch.Elapsed; ViewData["SelectorExpression"] = selector; var _selector = CssParser.ParseSelector(selector); if (_selector != null) { ViewData["Selector"] = _selector; ViewData["SelectedElements"] = _selector.Filter(document.Descendants()).Count(); } return(PartialView("PageViewer")); }
public CachePolicy CreateCachePolicy(HttpContextBase context) { return(HtmlProviders.GetCachePolicy(context)); }
/// <summary> /// 使用 MvcParser 分析加载文档。 /// </summary> /// <param name="context">当前 HTTP 请求上下文</param> /// <param name="virtualPath">文档的虚拟路径</param> /// <returns>加载的文档对象</returns> public static IHtmlDocument LoadDocument(HttpContextBase context, string virtualPath) { return(HtmlProviders.LoadDocument(context, virtualPath)); }