Пример #1
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));
        }
Пример #2
0
    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"));
    }
Пример #3
0
 public CachePolicy CreateCachePolicy(HttpContextBase context)
 {
     return(HtmlProviders.GetCachePolicy(context));
 }
Пример #4
0
 /// <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));
 }